对于分配我有构造中定义的结构,并希望创建这些使用新[]操作的阵列。我不明白为什么这是行不通的。该代码是像这样(伪码):
struct Structname
{
int x;
int y;
Structname(int a,int b)
{
x=a;
y=b;
}
}
现在要做的:
Structname *Array = new Structname[size]
结果错误“无功能匹配呼吁Structname Structname :: Structname()[大小]”(不准确的引文)。当在我的结构没有构造就像编译器期望我使用构造中Structname不会发生此错误*阵列=新Structname [大小。因为我需要在代码中的其他地方我不能删除构造。我也不能使用std ::矢量由于分配规则。
当你定义参数化的构造函数,编译器不注默认的构造函数,即Structname::Structname()
。这就是为什么你得到错误。
你可能会过去,它在两个方面:
1)定义自己的默认构造函数:
struct Structname {
int x;
int y;
Structname(int a,int b) {
x=a;
y=b;
}
Structname(): Structname(0, 0) { }
}
2)使用default
关键字,以得到本该是由编译器被注入的构造。
struct Structname {
int x;
int y;
Structname(int a,int b) {
x=a;
y=b;
}
Structname() = default;
}
请注意,在方案1中,数据成员以恰当的值初始化。在选项2中,数据成员不会被初始化为适当的值。
因此,请根据需求选择。
建议:
虽然漂亮无关的问题,它被认为是一个很好的做法。切勿使用明火新。寻找,而不是其他的选择。见std::vector
。