在这里,我尝试了一个类似的问题的解决方案
class A {
...
public:
// Give read-only access to vec_A
const std::vector<DataStruct> & getVector() const {
return vec_A;
}
};
但总是得到错误信息:'DataStruct' was not declared in this scope.DataStruct和vec_A被定义在同一个类的private section, public section下面。
请谁能帮帮我。
祝贺,Thomas
我想你的代码类似于下面的例子。
#include <iostream>
struct foo {
private:
struct bar {
void barbar() { std::cout << "hello";}
};
public:
bar foobar() { return bar{}; }
};
int main() {
foo f;
foo::bar x = f.foobar();
x.barbar();
}
它有一个错误:
<source>: In function 'int main()':
<source>:13:10: error: 'struct foo::bar' is private within this context
13 | foo::bar x = f.foobar();
| ^~~
<source>:4:15: note: declared private here
4 | struct bar {
| ^~~
因为 bar
是私人的 foo
. 然而,这并不意味着你不能在外面使用它。foo
. 您可以使用 auto
:
int main() {
foo f;
auto x = f.foobar();
x.barbar();
}
或 decltype
:
int main() {
foo f;
using bar_alias = decltype(f.foobar());
bar_alias x = f.foobar();
x.barbar();
}
你不能访问这个名字 DataType
但你可以使用 auto
你可以得到一个类型的别名。这也适用于 std::vector<DataType>
,只需要再多一些模板,就可以得到你所需要的 DataType
直接创建。
你试图从数据类型 "DataStruct "中创建一个向量。你确定你写了Class或实现了它吗?它可能只是一个变量。你知道你实际上必须在其中放入一个数据类型,比如int,bool,string。它定义了向量中的具体变量是由什么数据类型构成的。
首先,返回类型声明器部分 std::vector<DataStruct>
在这种情况下,需要一个完整的类型。这就是那个错误的标志。类定义块可以向前查找成员的标识符和签名,但不能查找类型定义。
A类在它的收尾括号之前是不完整的。连续定义的嵌套类在它们的收尾括号之前是不完整的。下面的声明是正确的。
class A
{
private:
struct DataStruct {
}; // a complete type
public:
// Give read-only access to vec_A
const std::vector<DataStruct> & getVector() const {
return vec_A;
}
private:
std::vector<DataStruct> vec_A;
};
在任何其他情况下,你可以向前声明它为: struct A::DataStruct
.