2012-02-20 11 views
21

Non riesco a ottenere g ++ per compilare codice C++ 11 che utilizza un costruttore di mosse. Continuo a ricevere questo errore:Come posso ottenere g ++ per compilare codice C++ 11 con un costruttore di mosse?

[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&)’ 

Il programma che sto scrivendo è molto diverso da questo, ma ho tagliato verso il basso per la parte che sembra come esso dovrebbe funzionare sicuramente, ma ancora genera l'errore:

#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; 
} 

Qualcuno può dirmi cosa sto facendo male? Piuttosto, come risolverlo?

Questa è la mia versione di gcc:

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

Si noti che passare un riferimento const per un costruttore di movimento è abbastanza inutile; realisticamente dovrebbe essere 'Blarg (Blarg && original)'. – ildjarn

+0

Sì, grazie. L'ho risolto nel mio codice attuale. Lo sistemerò anche sopra. – Collin

risposta

39

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

Mentre si è in esso, si potrebbe anche farlo bene e attivare tutte le avvertenze:

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

È davvero, davvero non dovrebbe essere la compilazione con meno, soprattutto se si sta andando per porre domande sul tuo codice su SO :-) Vari indicatori di ottimizzazione dovrebbero essere considerati facoltativamente per la versione di rilascio, ad esempio -s -O2 -flto -march=native.

+2

"Do It Right", mentre la pagina man per -std = C++ 0x afferma "Questa opzione abilita le funzionalità sperimentali che potrebbero essere rimosse in futuro" Sono sicure in quelle manpage :-) –

+0

Grazie mille per avermi salvato dal filtrare attraverso il manuale di oltre 600 pagine ... controllerò semplicemente che questo funziona come volevo e poi contrassegnarlo come risposta. – Collin

+2

@CaptainGiraffe: Per essere sicuri, l'opzione dialetto non è inclusa in "farlo bene". Detto questo, 'C++ 0x' sarà supportato per un po 'di tempo, ma da 4.7 in poi puoi anche dire' C++ 11'. –

14

Probabilmente hai dimenticato di aggiungere -std=c++0x alla tua riga di comando.

+0

Scarsa cosa, lo stesso tempo di risposta con altrettanto buona risposta pertinente ma non tanti voti positivi. Penso che la tua sia una risposta più succinta e rilevante! –

Problemi correlati