Sadece GCC 4.6.0'ı derledim ve döngü için aralık tabanlı olarak başlayan yeni özellikleri denemek istedim.
Değiştirmek istediğim ilk döngü, bir std :: işaretçisinin vektörünü yineliyordu. Yeni sözdizimini kullanmak için kodu değiştirdim, ancak derleme yapmadı.C++ 11 bir işaretçi vektörü için aralık tabanlı
Başka bir döngü için yerine geçmeyi denedim, std :: struct yapısındaydı ve mükemmel bir şekilde derlendi ve çalıştırıldı.
İşte size sorunumu göstermek için kısa bir test kodu: Ben (g ++ bir parametre olarak evet, vermek -std = C++ 0x) bunu derlemeye çalıştığınızda
#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;
}
, Bu hatayla birlikte ölür:
Çizgiler 27-30 çıkışını açıklarsam, sorun yok.
Neyi yanlış yapıyorum? İşaretçi referansı sözdizimini bildirmiyor mu?
Veya döngülere göre aralık tabanlı kullanılabilen, sınırlı türlerde bir sınırlama var mı?
Yardımlarınız için teşekkürler!
PROBA Should Bly SO –
@Doug: Agreed ... 'e taşınacak ve aynı zamanda sorunun küçük bir URL'ye sahip olmaktan ziyade kaynak kodu içermesi durumunda da yardımcı olacaktır. – jprete