我有以下会员数据
vector<State<T>*> activeChildren;
Run Code Online (Sandbox Code Playgroud)
我想在析构函数中清理这些指针
StateContainer<T>::~StateContainer() {
vector<State<T>*>::iterator it =
activeChildren.begin();
while(it!=activeChildren.end()) {
State<T>* ptr = *it;
it = activeChildren.erase(it);
delete ptr;
}
}
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu上从g ++ 4.3.2得到以下错误:
./fsm2/StateContainer.cpp: In destructor ‘virtual ervan::StateContainer<T>::~StateContainer()’:
../fsm2/StateContainer.cpp:24: error: expected `;' before ‘it’
../fsm2/StateContainer.cpp:25: error: ‘it’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?我在另外两个使用迭代器循环的地方得到了这个错误,但是当我使用for_each(...)时却没有
小智 20
看起来像typename时间 - 我认为你需要:
typename vector<State<T>*>::iterator it = ...
Run Code Online (Sandbox Code Playgroud)
g ++用户的启发式方法 - 当您在模板代码中看到此消息时:
expected `;' before ‘it’
Run Code Online (Sandbox Code Playgroud)
可以肯定的是,'it'前面的东西没有被编译器看作是一个类型,因此需要添加'typename'.
这是一个解析问题.在此代码中,vector<State<T>*>::iterator是嵌套的依赖类型.
直到你知道T是什么(并且在解析时不知道T),解析器/编译器没有意识到迭代器是一个类型(可能是一个静态成员变量,对于它所知道的所有).
因此,必须在定义前加上typename作为提示,告诉编译器,对于所有类型vector<State<T>*>,vector<State<T>*>::iterator都是类型名称.
| 归档时间: |
|
| 查看次数: |
2851 次 |
| 最近记录: |