2011-04-10 102 views
2

我有一個頂點類和一個類圖來繪製一個圖。我希望在Vertex類型的Vector中存儲幾個頂點,即頂點類的對象,但由於很少的錯誤,我無法直接存儲頂點對象,因此我將這些對象的引用存儲在向量中。但顯示時,我希望在控制檯上顯示矢量名稱,我無法這樣做。可能是我的語法不正確。請幫助我。下面是我的類和main()的代碼。通過指針打印值

我的要求是在控制檯上顯示「v1」,「v2」......等等。但現在它只顯示頂點上的地址。

回答

1

從我所看到的,在第一個for循環中,您沒有從「g1.Vertice1 [i]」獲取實際值,但嘗試打印指針。 Vertice1的類型是vector<Vertex<VertexType, EdgeType>*>(指向Vertex對象的指針矢量),因此您需要更改該行,以便它使用 - >運算符來取消引用指針並調用「Vert」並打印返回值,而不是試圖打印指針的值。

變化

std::cout << g1.Vertice1[i]<<endl; 

std::cout << g1.Vertice1[i]->Vert() <<endl; 
+0

是的,我嘗試以你提示的方式解引用它,但它在cout中給我一個「<<」的錯誤,說「沒有操作符<< <<匹配這些操作數」 – 2011-04-10 00:22:52

+0

嘗試做'std :: cout << g1。 Vertice1 [i] - > Vert << std :: endl;'。忘記了「頂點」類型不能直接打印,我犯了一個錯誤。編輯原創。 – JackMc 2011-04-10 01:06:05

+0

真棒!我工作過:D:D – 2011-04-10 01:14:53

0

看您要添加到g1.Vertice1載體什麼:

g1.Vertice1.push_back(&v1); 
g1.Vertice1.push_back(&v2); 

向量的元素是指針,而不是Vertex對象。考慮到Vertice1被聲明爲指向特定類型Vertex的指針向量,這是有意義的。

當你遍歷g1.Vertice1向量並輸出它的元素時,你因此輸出指針,這就是你看到地址的原因。因此,請考慮取消引用試圖打印出頂點名稱的循環中的指針。

+0

試圖提領,但得到的錯誤或 「<<」 在COUT說 「不操作 '<<' 匹配這些操作數」 – 2011-04-10 00:24:04

+0

這並不奇怪 - 'ostream'類不能輸出任意對象。寫一個'operator <<()'的重載,可以產生'Vertex'的一個體面可打印的表示。或者添加一個可以將'Vertex'轉換爲'string'或其他'ostream'已知如何輸出的東西的類型轉換。 – QuantumMechanic 2011-04-10 00:56:17