在c ++中使用带有struct的'new'关键字

时间:2011-10-14 12:06:01

标签: c++ compiler-errors new-operator dynamic-allocation

#include "PQueue.h"

struct arcT;

struct coordT {
    double x, y;
};

struct nodeT {
    string name;
    coordT* coordinates;
    PQueue<arcT *> outgoing_arcs;
};

struct arcT {
    nodeT* start, end;
    int weight;
};

int main(){
    nodeT* node = new nodeT; //gives error, there is no constructor
}

我的目的是在堆中创建一个新的nodeT。错误是:

  

错误C2512:'nodeT':没有合适的默认构造函数

3 个答案:

答案 0 :(得分:5)

PQueue<arcT *>没有合适的默认构造函数,因此编译器无法生成nodeT的默认构造函数。为PQueue<arcT *>创建一个合适的默认构造函数,或者为nodeT添加一个用户定义的默认构造函数,它正确构造outgoing_arcs

答案 1 :(得分:4)

如果问题中当前发布的代码是精确副本,则此错误的唯一可能原因是PQueue<…>未定义默认构造函数,而是定义另一个构造函数。

否则此代码将编译。

更准确地说,由于您没有为结构定义构造函数,因此C ++会尝试自动生成它们。但是,它只能执行此操作,只要其所有成员变量都具有适当的默认可构造性或可初始化。 std::string有一个默认构造函数,可以初始化coordT*作为指针。所以只有PQueue<…>仍然是罪魁祸首。

答案 2 :(得分:3)

这可能不是你的问题,但你只在arcT中的这一行声明了一个指针: -

nodeT* start, end;

您已将start声明为指针,并以实际的nodeT对象结束。这是你想做的吗?