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のこの行で1つのポインタしか宣言していません:-

nodeT* start, end;

startをポインタとして宣言し、endを実際のnodeTオブジェクトとして宣言しました。これはあなたがやりたかったことですか?

于 2011-10-14T12:36:34.853 に答える