首页 > 解决方案 > 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 定义在同一类中公共部分下方的私有部分中。

请,有人可以帮助我。

问候,托马斯

标签: c++vector

解决方案


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

#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


推荐阅读