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

问题描述 投票:0回答:2

在这里,我尝试了一个类似的问题的解决方案

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

c++ vector access
2个回答
1
投票

我想你的代码类似于下面的例子。

#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 直接创建。


0
投票

你试图从数据类型 "DataStruct "中创建一个向量。你确定你写了Class或实现了它吗?它可能只是一个变量。你知道你实际上必须在其中放入一个数据类型,比如int,bool,string。它定义了向量中的具体变量是由什么数据类型构成的。


0
投票

首先,返回类型声明器部分 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.

© www.soinside.com 2019 - 2024. All rights reserved.