2012-10-21 64 views
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; 
    } 
} 

這是它最初被調用的地方。它聲明它既是數組賦值又是將其'可見'成員賦值爲假的非指針類型。

+0

給我們一個失敗的案例極少。這應該工作。 –

+1

「它不起作用」不是一個足夠的錯誤描述。 – 2012-10-21 19:28:09

+3

你的例子編譯... http://ideone.com/dSEx5T – alestanis

回答

2

mark = new Vertex[numVert]; 

分配numVert存儲器中的對象(調用用於每個默認的構造),並返回所述第一對象的地址。 在這方面你的代碼是完全合法的。

調試器說對象mark指向不是一個指針,這是正確的(它是一個對象數組)。

+0

我現在明白了。謝謝,迪馬。 –

-3

試試這個:

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

這甚至不會編譯。 –

+0

只是編輯它。 – Igor