1
#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”:没有合适的默认构造函数可用

4

3 回答 3

5

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

于 2011-10-14T12:20:36.023 回答
4

如果问题中当前发布的代码是精确副本,那么导致此错误的唯一可能原因是PQueue<…&gt;没有定义默认构造函数,而是定义了另一个构造函数。

否则,此代码将编译。

更准确地说,由于您没有为结构定义构造函数,因此 C++ 会尝试自动生成它们。但是,它只能这样做,只要它的所有成员变量都是适当的默认可构造或可初始化的。std::string有一个默认构造函数,并且coordT*是一个指针,可以被初始化。所以只剩PQueue<…&gt;下罪魁祸首。

于 2011-10-14T12:21:04.947 回答
3

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

nodeT* start, end;

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

于 2011-10-14T12:36:34.853 回答