C++:从其他类访问结构的私有成员向量



来自此处的类似问题 我尝试了解决方案

class A {
...
public:
// Give read-only access to vec_A
const std::vector<DataStruct> & getVector() const {
return vec_A;
}
};

但总是得到错误:"数据结构"未在此范围内声明。 DataStruct 和 vec_A 定义在私有部分,公共部分下方,在同一类中。

拜托,有人可以帮助我吗?

问候 托马斯

我想你有类似于以下示例的代码:

#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 {
|               ^~~

因为barfoo是私人的.但是,这并不意味着您不能在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"创建一个向量。你确定你写了类/或实现了它吗?它可能只是一个变量。你知道你实际上必须把一个数据类型放进去,比如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

最新更新