2014-09-16 1 views
-4

libtorrent가 제공하는 샘플 프로그램 중 하나 인 client_test.cpp를 컴파일하려고합니다.우분투에서 g ++를 사용하여 client_test.cpp 컴파일 문제 14.04

http://pastebin.com/PWBhCXkY

내가이 명령을 사용하여 컴파일하고 있습니다 : 어떤 도움

http://pastebin.com/YF4VGVWr

감사 및하자 :이 오류 로그입니다

g++ client_test.cpp -DBOOST_ASIO_SEPARATE_COMPILATION -I/usr/local/include -o client_test >& log 

이 코드입니다 문제 진단을 위해 제공해야하는 다른 정보가 있다면 알려드립니다. 파블 말했듯이

+2

. 그리고 우리는 실제로 디버깅 서비스가 아닙니다. 직접 고치려고 했습니까? 어쩌면 코드가있는 곳에서이 질문을해야 할 것입니다. 아니면 함께 포함 된 설명서를 읽어 보시겠습니까? –

답변

1

,이 코드의 엄청 많이 ... 나는 불완전한 유형 오류를 많이 볼 수

이다. 이런 종류의 에러는 아직 완벽하게 구현/알려지지 않은 구조체를위한 공간을 할당하려고 할 때 발생합니다. 따라서 컴파일러가 올바르게 할당하지 못하고이 에러를 반환합니다. 여기 예를 들어

:

class A { 
     A aVariableOfTypeA; 
     ... 
} 

같은 오류가 발생합니다.

당신이 포인터를 사용할 필요가이 문제를 해결하려면 : 컴파일러는 멤버 변수 (aVariableOfTypeA를) 찾을 순간

class A { 
     A* aVariableOfTypeA; 
     ... 
} 

를, 유형 "A 등급은"이미 정의 등을위한 공간을 할당한다 포인터는 알려진 양의 메모리 (메모리 워드의 크기)를 취하기 때문에 포인터는 유효합니다.

코드를 살펴본 다음 위에 쓴 것과 비슷한 항목이 있는지 확인하십시오. 희망이 도움이됩니다! πάντα에서 주석을 해결하기 위해

는 --- 멤버 변수 유형은 자신의 클래스이므로 앞으로 선언을하지 않아도 내 예에서

을 ῥεῖ. 그러나,이 고려 :이 경우

class A { 
A* memberA; 
B* memberB; 
}; 

class B { 
A* memberA; 
B* memberB; 
} 

당신이 아직 (B) 정의되지 않은 유형의 사용을 순간에 당신이를 정의하기위한 앞으로 declaraion를 사용해야합니다, 그래서 당신이 할 필요가 컴파일러는 B가 무엇이되어야 하는지를 안다. 앞으로 선언으로

:

코드의 엄청 많이와 오류의 엄청 많이이야
class B; //Letting the compiler know that B will be a class; 
class A { 
A* memberA; 
B* memberB; 
}; 

class B { 
A* memberA; 
B* memberB; 
} 
+0

_ "이 문제를 해결하려면 포인터를 사용해야합니다 :"_ ... and forward declaration! " –

+0

이 경우에는 전달 선언을 사용할 필요가 없습니다. class A {A * a; }; A a; A b; b.a = & a; 잘 작동합니다. – victor

+0

_ "전달 선언을 사용할 필요가 없습니다 ..."_ 예, 대부분의 경우 더 나은 선택입니다 (의존하는 클래스 선언을 위해'# include' 문을 생략 함) –