#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':没有合适的默认构造函数
答案 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对象结束。这是你想做的吗?