2012-03-19 38 views
18

Bunu söylemem gerekirse utanç verici olduğunu düşünüyorum. Lütfen bana yardım olacaktır:unique_ptr derleme hatası

#include<memory> 
using namespace std; 

int main() 
{ 
    std::unique_ptr<int> p1(new int(5)); 
    return 0; 
} 
$ gcc main.cpp 
main.cpp: In function ‘int main()’: 
main.cpp:6:2: error: ‘unique_ptr’ was not declared in this scope 
main.cpp:6:13: error: expected primary-expression before ‘int’ 
main.cpp:6:13: error: expected ‘;’ before ‘int’ 

$ gcc --version 
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 
+2

'gcc' neredeyse bazı seçenekler geçmeden asla kullanılmaz. En azından 'g ++ -std = C++ 0x -pedantic main.cpp' deneyin. –

+5

std'yi neden kullanıyorsunuz? neyse? – Azrael3000

+0

teşekkürler. işe yaradı. 1- Neden bir cevap yazmıyorsunuz ki, bunu doğru olarak işaretleyebilirim. 2-Eğer üzerindeyken, bana gcc'in hiç kullanılmadığı (ve yerine g ++ kullandığını) veya belki de bir referansa bağlandığından kısa bir neden verir misiniz? teşekkürler – rahman

cevap

31

Bu sadece bir tahmin olduğunu. Eğer (veya benzer) böyle Programınızı derlenmiş Büyük olasılıkla

: Eğer yaptıysan

g++ main.cpp 

, o zaman sorun o g ++ varsayılan olarak ++ 03 c kullanır.

g++ -std=c++11 

veya

g++ -std=c++14 

ve ayrıca tavsiye ederim -Wall -Wextra -pedantic kullanmak: ++ c 11 özellikleri (ve std::unique_ptr) kullanmak için, C++ yeni sürümünü kullanmanız gerekir.

+0

Aynı sorunla karşı karşıyayım, ancak '-std = C++ 11 'bayrağı etkinleştirildi ve gerekli tüm üstbilgiler dahil edildi. Yanlış olanı alamıyorum: https://gist.github.com/canadien91/2ba3f9576823159c2d52 – Montreal

+0

gelecekteki başvurular için: @Montreal #include Stuck

+0

@Stuck, hmm, benimbenim gist dahil. Ama bunu eklediğimde şimdi hatırlamıyorum. – Montreal

3

Eğer :: Blokları, Ayarlar> Derleyici> Genel derleyici ayarları> Derleyici ayarları gidip Var g ++ izleyin C++ 11 ISO C++ dilinin standart [-std=c++11] aramaya Kod kullanıyorsanız ve kontrol et!

(Kod :: derlerken Blokları sizin için -std=c++11 katacak)