【发布时间】:2011-08-08 03:35:40
【问题描述】:
我刚刚编译了 GCC 4.6.0,我想尝试一下新功能,从基于范围的 for 循环开始。
我想改变的第一个循环是在指针的 std::vector 上迭代。我更改了代码以使用新语法,但它没有编译。
我尝试替换另一个 for 循环,它位于结构的 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|错误:在嵌套名称说明符中找到“:”,应为“::”
如果我将第 27-30 行注释掉,就可以了。
我做错了什么?指针引用声明语法不对吗?
或者是否存在可以使用基于范围的 for 循环的包含类型的限制?
【问题讨论】:
-
应该可以移到 SO
-
@Doug:同意...如果问题包含源代码而不是一个很小的 URL,这也会有所帮助。