2012-02-20 3 views
21

g ++에서 이동 생성자를 사용하는 C++ 11 코드를 컴파일 할 수 없습니다. 오류 트리거g ++에서 이동 생성자로 C++ 11 코드를 컴파일하려면 어떻게해야합니까?

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

내가 쓰고있는이 프로그램이 매우 다르다, 그러나 나는 아직도 확실히 작동합니다 것 같아, 아직 부분에 아래로 손질 :

#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; 
} 
을이 오류가 계속

누구나 내가 뭘 잘못하고 있다고 말할 수 있습니까? 오히려 그것을 고치는 방법?

이 내 GCC 버전 :

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

이동 생성자에 대한 const 참조를 전달하는 것은 거의 쓸모가 없다는 점에 유의하십시오. 현실적으로 Blarg (Blarg && 원본)이어야합니다. – ildjarn

+0

예, 고마워요. 나는 실제 코드에서 그것을 고쳤다. 나는 그것을 위에 또한 고칠 것이다. – Collin

답변

39

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

당신이 그것에 인 동안, 당신은뿐만 아니라 그것을 마우스 오른쪽 수행하고 활성화 할 수있는 모든 경고 :

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

당신은 정말, 정말 어떤 이하, 특히 당신이려고하는 경우 컴파일하지 말아야 SO에 대한 귀하의 코드에 대해 질문하십시오 :-) -s -O2 -flto -march=native과 같은 다양한 최적화 플래그를 릴리스 버전에 대해 선택적으로 고려해야합니다.

+2

"Do It Right", -std = C++ 0x에 대한 man 페이지는 "이 옵션을 사용하면 나중에 제거 될 수있는 실험 기능을 활성화합니다"라고 말합니다. 해당 manpages에서 확실히 방어합니다 :-) –

+0

나를 구 해주셔서 고마워요. 필터링에서 600+ 페이지 매뉴얼을 통해 ... 내가 의도 한대로 작동하는지 확인한 다음 대답으로 표시하십시오. – Collin

+2

@CaptainGiraffe : 방언 옵션은 "올바르게하고있다"에 포함되어 있지 않습니다. 즉, 'C++ 0x'는 얼마 동안 지원되지만, 4.7 이후부터는 'C++ 11'이라고 말할 수 있습니다. –

14

-std=c++0x을 명령 줄에 추가하는 것을 잊었을 것입니다.

+0

부적절한 대답, 같은 대답과 동일한 대답 시간. 나는 네가 더 간결한 관련 답변이라고 생각한다. –

관련 문제