2013-04-05 60 views
0

考慮下面的代碼:作用域問題在C++中重定義變量

for (list<Vertex*>::iterator v = vertexList->begin(); v != vertexList->end(); v++) 
{ 
    if (!(*(*v) == *u)) 
    { 
     (*v)->setColor(white); 
     (*v)->setPred(NULL); 
     (*v)->setDist(INFINITY); 
    } 
} 

queue<Vertex*> Q; 
Q.push(u); 
Vertex* v = Q.front(); // WONT assign the item that is in the queue to v 
Vertex* t = Q.front();  // WILL assign the item that is in the queue to t 

正如你所看到的變量V已經在被定義爲循環,(至少據我所知)應該持續僅在範圍。 (而for是活動的)。

但是,當我試圖將Q前端分配給一個名爲V的新變量時,它不會真的把當前在QUEUE中的項目放入內部。相反,我只是看到??????在裏面。 (使用visual STUDIO 2012)。編譯成功通過。另一方面,當我嘗試將Q前端分配給一個未命名爲v的變量時,它會讓我這樣做,並且T將保持正確的值(隊列中的第一項)。

我在這裏想念什麼..?

+0

智能指針是你的朋友 – 2013-04-05 05:20:45

+0

視覺工作室之前有過這個問題,他們不會保留其範圍內的變量與'for'定義的變量。最簡單的事情就是重命名一個變量。 – scones 2013-04-05 05:23:06

+0

同樣的問題似乎在這裏討論(甚至有一個解決方案與Visual C++編譯器設置正確的選項有關):http://stackoverflow.com/questions/14068432/c-for-variable-scope – jogojapan 2013-04-05 05:46:06

回答

0

我認爲這只是一個調試器錯誤,如果存在Vertex的描述性屬性或成員,則可以寫入控制檯進行控制,您將看到Vertex * v已正確分配。