在什么条件下生成默认构造函数?

lez*_*lon 4 c++ constructor default-constructor

我有以下课程:

class Tileset { //base class

public:
    static std::vector<Tileset*> list;
    virtual ~Tileset() = 0;

protected:
    std::vector<Tile> tiles_list;
    sf::Texture sheet;

private: //non copiable
    Tileset(const Tileset&);
    Tileset& operator=(const Tileset&);
};
Run Code Online (Sandbox Code Playgroud)

哪里sf::Texture有默认构造函数

根据我的理解,应该生成默认构造函数,因为每个成员也可以默认构造.但是当我尝试构造派生对象而不调用Tileset构造函数时,我遇到了编译器错误.有人可以解释为什么没有生成默认构造函数?

编辑:忘了提到Tile该类没有默认构造函数.我不确定这是否会改变任何事情

Jar*_*Par 10

如果满足以下任何条件,则不会生成默认构造函数

  • 声明了一个用户定义的构造函数
  • 该类型具有const或引用字段

您声明了构造函数,因此C++不会提供默认生成的构造函数.在这种情况下,虽然所有字段Tileset都有有用的默认构造函数,因此在这里定义默认构造函数非常容易

Tileset() { }
Run Code Online (Sandbox Code Playgroud)