Я только что скомпилировал GCC 4.6.0, и я хотел опробовать новые возможности, начиная с цикла for, основанного на диапазоне.
Первый цикл, который я хотел изменить, был итерацией по std :: vector ofуказатели.Я изменил код, чтобы использовать новый синтаксис, но он не компилировался.
Я попытался заменить другой цикл, который был на 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, это нормально.
Что я делаю не так?Разве указатель-ссылка не объявляет синтаксис правильным?
Или есть ограничение для содержащихся типов, в которых могут использоваться циклы, основанные на диапазонах?
Спасибо за любую помощь!