如何使私有子类的容器成员?

时间:2016-04-14 00:10:20

标签: c++ constructor

我写了一个这样的课:

class Base {
public:
    Base():con{5} {}
private:
    class subClass {
        subClass(int t):data{t} {}
        int data;
    };
    vector<subClass> con;
};

在这个类中,我希望有一个容器成员来存储它的私有子类,因为我认为con有权访问和新的subClass,但结果编译器被告知我:

  

test.cpp:8:3:错误:'Base :: subClass :: subClass(int)'是私有的:
  subClass(int t):data {t} {}
  test.cpp:5:14:错误:在此范围内   context Base():con {5} {}

所以我的问题是为什么我的代码不起作用。任何建议都非常感谢!

2 个答案:

答案 0 :(得分:0)

问题是subClass不提供公共构造函数,因此提供一个

class Base {
public:
    Base():con{5} {}
private:
    class subClass {
        int data;
    public:
        subClass(int t):data(t) {}
    };
    vector<subClass> con;
};

答案 1 :(得分:0)

问题在于声明

Base():con{5} {}

尝试使用值con构建的subClass实例初始化向量5

然而相应的构造函数

subClass(int t):data(t) {}

目前私有

尽管subClassBase的私人成员,但通常的可见性规则适用。 Base除非是公开的,否则无法看到subClass::subClass(int)

class subClass {
public:
    subClass(int t): data(t) {}
private:
    int data;
}