未声明的标识符超出范围? (使用C ++列表)

时间:2011-04-20 03:46:02

标签: c++

我正在尝试访问其中一个类的列表实例。 但是我收到了这个错误:

  

错误C2065:'blocks':未声明的标识符    错误C2228:'。push_back'的左边必须有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 个答案:

答案 0 :(得分:2)

代码不知道blocks是什么,因为它是在使用它的代码之后全局定义的。

您需要将此行移至Test类之上:

list<Block> blocks;

或者,也可以将此列表作为Test类的成员而不是全局。

您的代码也有许多其他问题。例如,您已创建指向Test对象的指针,但尚未为其分配内存。您需要在main()

的开头执行此操作
test = new Test();

但是你必须在使用后删除它:

delete test;

更好的是,只需在main中创建堆栈上的Test对象:

Test test;

答案 1 :(得分:0)

list<Block> blocks;无法看到变量doSomething()。所以你可以在函数之前声明变量,或者在变量之后定义函数。

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