我有以下类(class):
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&);
};
其中 sf::Texture
有一个默认构造函数
根据我的理解,应该生成默认构造函数,因为每个成员也可以是默认构造的。
然而,当我尝试在不调用 Tileset
构造函数的情况下构造派生对象时,我遇到了编译器错误。
有人可以解释为什么没有生成默认构造函数吗?
编辑:忘记提及 Tile
类没有默认构造函数。我不确定这是否会改变什么
最佳答案
如果满足以下任一条件,则不会生成默认构造函数
- 声明了一个用户定义的构造函数
- 该类型有一个
const
或引用字段
您声明了构造函数,因此 C++ 不会提供默认生成的构造函数。在这种情况下,虽然 Tileset
的所有字段都有有用的默认构造函数,因此在这里定义默认构造函数非常容易
Tileset() { }
关于c++ - 默认构造函数是在什么情况下生成的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638527/