在我的C++项目中,有一个需要创建对象数组的类。在类的不同实例之间,数组的大小将会不同,因此我选择了使用数组。
如果我执行以下操作:
编译器抱怨“没有匹配的构造函数来初始化Character”
我如何动态声明类型为"Character"的数组。
注意:Character与char无关。Character是我自己创建的类的名称。
编辑:Character没有默认构造函数,因为它需要传递多个参数,以便可以用正确的状态进行初始化。它唯一的构造函数需要传入多个参数。
编辑:我选择了一个动态创建的数组,而不是vector,因为我知道在实例的生命周期内,数组的大小将是恒定的,尽管在不同的实例之间,大小将不同。我认为这对于性能(内存/速度)来说是有意义的。
如果我执行以下操作:
int numberOfPlayers; // This is determined at run time.
int *players;
//In constructor
players= new int[numberOfPlayers]; // This works
但是如果我这样做:
Character *players;
players = new Character[numberOfPlayers]; // Compiler complains
编译器抱怨“没有匹配的构造函数来初始化Character”
我如何动态声明类型为"Character"的数组。
注意:Character与char无关。Character是我自己创建的类的名称。
编辑:Character没有默认构造函数,因为它需要传递多个参数,以便可以用正确的状态进行初始化。它唯一的构造函数需要传入多个参数。
编辑:我选择了一个动态创建的数组,而不是vector,因为我知道在实例的生命周期内,数组的大小将是恒定的,尽管在不同的实例之间,大小将不同。我认为这对于性能(内存/速度)来说是有意义的。
new
创建数组是最不实用的方法之一。考虑使用std::vector
。 - M.Mstd::vector
,你甚至不用担心这个默认构造函数的问题。请查看下面的答案。 - Drew DormannCharacter
类吗?有时缺少默认构造函数是故意的,并暗示着在某些构造参数可用之前,Character
对象可能没有意义 - 你可以等到它们可用后再使用push_back
或emplace
将元素添加到std::vector<Character>
中,这通常比使用数组和new
更容易正确使用。 - Tony Delroynew[]
操作符不允许传递任何参数到构造函数中,所以编译器只能使用默认构造函数。 - Matthieu M.