C++ 使用';新';c+中带结构的关键字+; #包括“PQueue.h” 结构arcT; 结构坐标{ 双x,y; }; 结构节点{ 字符串名; 坐标*坐标; PQUE输出弧; }; 结构arcT{ 节点*开始,结束; 整数权重; }; int main(){ nodeT*node=new nodeT;//给出错误,没有构造函数 }

C++ 使用';新';c+中带结构的关键字+; #包括“PQueue.h” 结构arcT; 结构坐标{ 双x,y; }; 结构节点{ 字符串名; 坐标*坐标; PQUE输出弧; }; 结构arcT{ 节点*开始,结束; 整数权重; }; int main(){ nodeT*node=new nodeT;//给出错误,没有构造函数 },c++,compiler-errors,new-operator,dynamic-allocation,C++,Compiler Errors,New Operator,Dynamic Allocation,我的目的是在heap中创建一个新的nodeT。错误是: 错误C2512:“节点集”:没有合适的默认构造函数可用 PQueue没有适当的默认构造函数,因此编译器无法生成nodeT的默认构造函数。为PQueue创建一个适当的默认构造函数,或者为nodeT添加一个用户定义的默认构造函数,该构造函数可以适当地构造传出弧。PQueue没有适当的默认构造函数,因此,nodeT的默认构造函数不能由编译器生成。为PQueue创建一个适当的默认构造函数,或者为nodeT添加一个用户定义的默认构造函数,该构造函数可

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


错误C2512:“节点集”:没有合适的默认构造函数可用


PQueue
没有适当的默认构造函数,因此编译器无法生成
nodeT
的默认构造函数。为
PQueue
创建一个适当的默认构造函数,或者为
nodeT
添加一个用户定义的默认构造函数,该构造函数可以适当地构造
传出弧。

PQueue
没有适当的默认构造函数,因此,
nodeT
的默认构造函数不能由编译器生成。为
PQueue
创建一个适当的默认构造函数,或者为
nodeT
添加一个用户定义的默认构造函数,该构造函数可以适当地构造
传出弧。

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

否则,此代码将编译


更确切地说,因为您没有为结构定义构造函数,所以C++试图自动生成它们。不过,它只能做到这一点,只要它的所有成员变量都是适当的默认可构造或可初始化的

std::string
有一个默认构造函数,可以初始化作为指针的
coordT*
。因此,只有
PQueue
仍然是罪魁祸首。

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

否则,此代码将编译


更确切地说,因为您没有为结构定义构造函数,所以C++试图自动生成它们。不过,它只能做到这一点,只要它的所有成员变量都是适当的默认可构造或可初始化的

std::string
有一个默认构造函数,可以初始化作为指针的
coordT*
。因此,只有
PQueue
仍然是罪魁祸首。

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

#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
}

您已经声明开始为指针,结束为实际节点集对象。这就是您想要做的吗?

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

#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
}

您已经声明开始为指针,结束为实际节点集对象。这就是您想要做的吗?

该代码没有问题-
coordT
有一个隐式生成的构造函数,它什么也不做。你真的从代码中得到错误吗?它到底说了什么?错误C2512:“节点集”:没有合适的默认构造函数可用您有不同的问题。您提供的代码编译良好(您声明过任何构造函数吗?),您可以尝试将其粘贴到ideone或任何其他类似页面以验证这一点。您确定没有在coordT中定义参数化构造函数吗?@segfult:您发布的代码中没有
nodeT
,因此无论您真正编译什么,这段代码没有出现一些错误。这段代码没有问题-
coordT
有一个隐式生成的构造函数,它什么也不做。你真的从代码中得到错误吗?它到底说了什么?错误C2512:“节点集”:没有合适的默认构造函数可用您有不同的问题。您提供的代码编译良好(您声明过任何构造函数吗?),您可以尝试将其粘贴到ideone或任何其他类似页面以验证这一点。您确定没有在coordT中定义参数化构造函数吗?@segfult:您发布的代码中没有
nodeT
,因此无论您真正编译什么,它有一些错误,这段代码没有。不,这不是我想做的,我想他们都是指针,你节省了我很多时间不,这不是我想做的,我想他们都是指针,你节省了我很多时间