0
struct Vertex{
    int num;
    int low;
    bool seen;
    Vertex *parent;
    Vertex(){
        num = 0; low = 0; seen = false; parent = NULL;
    }
};

これは構造体です。問題は、Vertex型の配列を作成しようとすると、デバッガーが非ポインタークラス型であると表示することです。これは私がそれを宣言する方法です:

Vertex *mark;
mark = new Vertex[numVert];

(マークはクラスで宣言され、割り当てはデフォルトのコンストラクターで行われます)。

以前、このようにポインタ配列を宣言しました。それが今機能しない理由は何でしょうか?

Graph::Graph(int v){
int i;
numVert = v;
count = 0;
mark = new Vertex[numVert];
matrix = new int*[numVert];
for (i=0;i<numVert;i++){
    mark[i]->seen = false;
    matrix[i] = new int[numVert];
    for (int j=0; j<numVert;j++)
        matrix[i][j]=0;
    }
}

これは最初に呼ばれる場所です。配列の割り当てとその「seen」メンバーのfalseへの割り当ての両方で非ポインター型であると述べています。

4

2 に答える 2

2

この線

mark = new Vertex[numVert];

numVertオブジェクトをメモリに割り当て(それぞれのデフォルトコンストラクタを呼び出します)、最初のオブジェクトのアドレスを返します。その点で、あなたのコードは完全に合法です。

デバッガーは、オブジェクトmarkが指しているのはポインターではなく、正しい(オブジェクトの配列である)と言っています。

于 2012-10-21T19:33:58.877 に答える
-3

これを試して:

Vertex **mark[numVert]; 
mark = new Vertex *[numVert]; 
于 2012-10-21T19:36:01.147 に答える