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將保持正確的值(隊列中的第一項)。
我在這裏想念什麼..?
智能指針是你的朋友 – 2013-04-05 05:20:45
視覺工作室之前有過這個問題,他們不會保留其範圍內的變量與'for'定義的變量。最簡單的事情就是重命名一個變量。 – scones 2013-04-05 05:23:06
同樣的問題似乎在這裏討論(甚至有一個解決方案與Visual C++編譯器設置正確的選項有關):http://stackoverflow.com/questions/14068432/c-for-variable-scope – jogojapan 2013-04-05 05:46:06