C++ 创建包含子类的类向量

C++ 创建包含子类的类向量,c++,visual-studio,subclass,declaration,stdvector,C++,Visual Studio,Subclass,Declaration,Stdvector,我有一个向量,我想在其中存储子类。但我面临的问题是,它给了我一个错误。 我将其视为参考,但现在我遇到了以下错误: 错误:“Subclass::Subclass”(声明于…)不可访问 我的代码如下: class SuperClass { public: SuperClass() {} ~SuperClass() {} }; class SubClass : public SuperClass { SubClass() {} //there is no .cpp ~S

我有一个向量,我想在其中存储子类。但我面临的问题是,它给了我一个错误。 我将其视为参考,但现在我遇到了以下错误:

错误:“Subclass::Subclass”(声明于…)不可访问

我的代码如下:

class SuperClass
{
 public:
    SuperClass() {}
    ~SuperClass() {}

};
class SubClass : public SuperClass
{
   SubClass() {} //there is no .cpp
   ~SubClass() {}
};

int main()
{
    std::vector<SuperClass*> superClass;
    superClass.push_back(new SubClass());
    return 0;
}
类超类
{
公众:
超类(){}
~SuperClass(){}
};
类子类:公共超类
{
子类(){}//没有.cpp
~SubClass(){}
};
int main()
{
向量超类;
push_back(新的子类());
返回0;
}

类的默认访问类型为
私有
。因此,
子类
的构造函数和析构函数都是
私有的
。在前面添加
public
访问说明符

class Subclass : public SuperClass{

     // Add this
     public:

        SubClass() {} //there is no .cpp
       ~SubClass() {}
  };

请提供一个完整但最少的示例,供读者尝试。也就是说,编译器的诊断“无法访问”说明了一切。构造函数不可访问,因为默认情况下,
的成员是
私有的
。因此,要么使用
struct
关键字,要么在构造函数定义之前添加
public:
access说明符,或者,取消绑定,使class
Program
a
friend
。这样做有效。很好,我只是忘记了访问类型。