2011-04-20 60 views
1

我想在我的一個類中訪問列表的實例。 但是我得到這個錯誤:未聲明的標識符超出範圍? (使用C++列表)

error C2065: 'blocks' : undeclared identifier error C2228: left of '.push_back' must have class/struct/union

這裏是我的代碼: 的#include

class Block{ 
.. 
.. 
}; 

class Test{ 
.. 
.. 
void doSomething(){ 
    Block b(70,300,1); 
    blocks.push_back(b); 
} 
}; 

list<Block> blocks; 
Test *test; 

int main(){ 
test->doSomething(); 
} 

回答

2

的代碼不知道blocks是什麼,因爲它是在使用它的代碼後,全局定義。

您需要移動這條線是略高於Test類:

list<Block> blocks; 

或者,使這個列表中的Test類的成員,而不是全球性的。

您的代碼也有許多其他問題。例如,您創建了一個指向Test對象的指針,但尚未爲其分配內存。你需要在main()開始這樣做:

test = new Test(); 

但你必須在使用後刪除它太:

delete test; 

更妙的是,剛剛創建主堆棧中的Test對象:

Test test; 
+0

謝謝!這解決了它。 – Test 2011-04-20 03:58:46

+0

@Test - 很高興幫助。如果你可以把這個標記爲公認的答案,那就太好了。 – LeopardSkinPillBoxHat 2011-04-20 04:08:08

0

變量list<Block> blocks;doSomething()可見。所以你可以在函數之前聲明變量,或者在變量之後定義函數。

class Test { 
... 
void doSomething(); 
}; 
list<Block> blocks; 
... 
void Test::doSomething() 
{ ... }