2012-02-20 14 views
21

Bir taşıma yapıcısı kullanan C++ 11 kodunu derlemek için g ++ elde edemiyorum. hatayı tetiklerC++ 11 kodunu bir hareket ettirici ile derlemek için g ++ nasıl alırım?

[email protected]:~/Projects/arraylib$ g++ ./t2.cpp 
./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&’ token 
./t2.cpp:10:38: error: invalid constructor; you probably meant ‘Blarg (const Blarg&)’ 

yazıyorum programı bu oldukça farklıdır, ancak yine de kesinlikle çalışması gerekir gibi görünüyor, henüz kısmına aşağı kesilmiş:

#include <iostream> 

using namespace std; 

class Blarg { 
    public: 
     Blarg() {}; 
     Blarg (const Blarg& original) {}; /* Copy constructor */ 
     Blarg (Blarg&& original) {}; /* Move constructor */ 
}; 

int main(int argc, char *argv[]) 
{ 
    Blarg b; 
    return 0; 
} 
bu hatayı almaya devam

Bana yanlış ne yaptığımı söyleyen var mı? Aksine, nasıl düzeltilir?

Bu benim gcc sürümü:

gcc (Ubuntu/Linaro 4.6.2-14ubuntu2) 4.6.2 
+2

Bir hamle yapıcısı için bir const başvurusu geçirmenin yararsız olduğunu unutmayın; gerçekçi olarak bu Blarg (Blarg && orijinal) 'olmalıdır. – ildjarn

+0

Evet, teşekkürler. Bunu gerçek kodumda düzelttim. Ben de yukarıda tamir edeceğim. – Collin

cevap

39

Say g++ -std=c++0x ./t2.cpp.

bunu yaparken, siz de It Right yapın ve sağlayabilecek tüm uyarılar:

g++ -W -Wall -Wextra -pedantic -std=c++0x -o t2 t2.cpp 

Gerçekten, gerçekten daha az, özellikle gidiyorsun eğer birlikte derleme edilmemelidir SO :-) üzerindeki kodunuz hakkında sorular sormak Opsiyonel olarak -s -O2 -flto -march=native gibi sürüm sürümleri için çeşitli optimizasyon bayrakları dikkate alınmalıdır.

+2

"Do It Right", -std = C++ 0x için man sayfası "Bu seçenek gelecekte kaldırılabilen deneysel özellikleri etkinleştirir" diye belirtiyor. Bu sayfalarda mutlaka eminler :-) :-) –

+0

Beni kurtardığın için çok teşekkürler 600+ sayfa el kitabından filtrelemeden ... Bunun yalnızca istediğim şekilde çalıştığını kontrol edip yanıt olarak işaretleyeceğim. – Collin

+2

@CaptainGiraffe: Emin olmak gerekirse, lehçe seçeneği "doğru yapmak" altında sınıflandırılmamıştır. Yani, C++ 0x' bir süre için desteklenecek, ancak 4.7'den itibaren 'C++ 11' de diyebilirsiniz. –

14

Komut satırına -std=c++0x kodunu eklemeyi unutmuş olabilirsiniz.

+0

Zayıf bir şey, aynı cevaplama süresi kadar iyi bir cevapla değil, oy çokluğu kadar. Bence seninki daha özlü bir cevap! –