我刚刚编译了GCC 4.6.0,并想尝试其中的新功能,首先是范围-based for 循环。
我想要改变的第一个循环是迭代指向 std::vector 中的指针。我更改了代码以使用新语法,但它并没有编译成功。
我尝试替换另一个循环,它是在一个 std::vector 的结构体上,它编译和运行得非常完美。
这里有一个简短的测试代码,用来展示我的问题:
#include <vector>
#include <iostream>
int main()
{
std::vector< int > values;
values.push_back(2);
values.push_back(5);
values.push_back(8);
values.push_back(13);
values.push_back(17);
for (int &n : values)
{
std::cout << n << "\n";
}
std::vector< int* > pointers;
pointers.push_back(new int(2));
pointers.push_back(new int(5));
pointers.push_back(new int(8));
pointers.push_back(new int(13));
pointers.push_back(new int(17));
for ((int*) &p : values)
{
std::cout << (*p) << "\n";
}
for( unsigned int i = 0; i < pointers.size(); ++i)
{
delete pointers[i];
}
return 0;
}
当我尝试编译它(是的,我把-std=c++0x作为g++的参数)时,出现以下错误:
main.cpp|27|error: found ‘:’ in nested-name-specifier, expected ‘::’
如果我注释掉27-30行,则可以编译通过。
我做错了什么?指针引用的声明语法不对吗?
或者使用基于范围的for循环有所限制吗?