新结构的数组[]似乎并没有说是否有结构构造[关闭]工作

问题描述 投票:-4回答:1

对于分配我有构造中定义的结构,并希望创建这些使用新[]操作的阵列。我不明白为什么这是行不通的。该代码是像这样(伪码):

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 ::矢量由于分配规则。

c++ struct new-operator
1个回答
1
投票

当你定义参数化的构造函数,编译器不注默认的构造函数,即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

© www.soinside.com 2019 - 2024. All rights reserved.