将私人内部阶级变为主体

时间:2012-07-28 04:30:55

标签: c++ nested-class

这是代码:

class Vec
{
public:
    Vec() {len=0;};
    Vec(int n);
    ~Vec();
    void setValue(int idx,int v);
    void printVec() const;
private:
    class Items
    {
        friend class Vec;
        Items(){value = 0;};
        Items(int v){value = v;};
        int value;
    };
    int len;
    Items *vec;
};

/*Declare the member functions & constructor & destructor*/

int main()
{
    Vec vector(5);
    vector.printVec();
    for(int i=0;i<5;i++){
        vector.setValue(i,i);
        vector.printVec();
    }
    Items n;
    return 0;
}

当我尝试使用Items n;时,出现错误:“未声明的项目”。

但在使用vector.Items n;时,错误仍然是“class Vec::Items无效使用”

如何让编译器识别声明?

1 个答案:

答案 0 :(得分:2)

  

我想让它可以宣布。

您需要使Items成为Vec类的公共嵌套或内部类,然后在创建实例时使用范围解析运算符(即Vec::Items)那个对象类型。否则,您只能在Vec::Items的方法中创建Vec对象的实例,因为它将是Vec的私有内部类,而不是可公开访问的类类型