c++ - C ++:从其他类访问结构的私有成员向量
问题描述
从一个类似的问题here我尝试了解决方案
class A {
...
public:
// Give read-only access to vec_A
const std::vector<DataStruct> & getVector() const {
return vec_A;
}
};
但总是得到错误:'DataStruct' 未在此范围内声明。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 {
| ^~~
因为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
。
推荐阅读
- javascript - v-calendar 问题,如何根据对象数组列表中的日期禁用日期
- android - 错误应用程序:transformClassesWithFirebasePerformancePluginForDebug 失败
- python - 如何复制一行但在 Pandas 中交换值
- .net-core - AcquireTokenByUsernamePassword 抛出 System.AggregateException 和 MsalServiceException
- cisco - 如何动态拉取当前 Cisco IOS 版本的列表?
- amazon-web-services - AWS Glue- 使用多分隔符以 CSV 格式编写动态框架
- python-3.x - 生成器如何在 pyinput 等事件循环中工作
- batch-file - 复制、重命名和移动目录中的所有文件
- python - 如何用 NumPy 分解多项式并很好地打印它?
- python - 使用 matplotlib 看起来像平面 2D 数学插图的 3D 几何图?