2011-11-02 8 views
2

문제가 있으며 해결 방법이 없습니다. 나는이 바보 간단하다 생각 :
Util.hpp중첩 클래스, 정의되지 않은 참조, 정적 메서드

class Util 
{ 
    public: 
     class BitParser 
     { 
      public: 
       static bool getBitAt(int buf, int idx); 
     }; 
}; 

Util.cpp

#include "Util.hpp" 
bool Util::BitParser::getBitAt(int buf, int idx) 
{ 
    return true; 
} 

application.cpp 나오긴의

#include "Util.hpp" 
int main(int argc, char* argv[]) 
{ 
    Util::BitParser::getBitAt(1,1); 
} 

:

나는 3 개 파일이 위에 나열된 파일은 같은 디렉토리에 있습니다. 그리고 지금 링크 및 컴파일하려고하면 링커 오류가 발생합니다 :

$ g++ -o app application.cpp 
application.cpp:(.text+0x19): undefined reference to `Util::BitParser::getBitAt(int, int)' 
collect2: ld returned 1 exit status 

무엇이 망가져 있습니까?

+0

컴파일 명령에 util.cpp를 추가하십시오. –

답변

4

당신은 g ++에게 당신의 'main'프로그램을 컴파일하도록 말했지만 Util 모듈에 대해서는 말하지 않았다. 명령 행에 Util.cpp을 추가하면 모든 것이 잘 작동합니다.

컴파일러

는이 "application.o" Util::bitparser 함수를 참조하는 파일 brewn있다.

링커는 이러한 기능의 실제 코드가 들어있는 "util.o"파일에이 참조를 연결해야합니다. 그러나 링크를 만족시키는 함수를 포함하는 .o 파일은 없습니다. 즉, "정의되지 않은 참조"라고합니다. "application.o"을 링커가 찾을 수없는 함수로 참조합니다.

2

빌드에 application.cpp와 Util.cpp를 모두 포함시켜야합니다.

3

.cpp 개의 파일을 모두 컴파일하고 링크해야합니다. 귀하의 경우 그래서,이 명령은 여전히 ​​

$ g++ -o app application.cpp Util.cpp 

더 나은 당신을 위해이 작업을 수행하는 Makefile을 작성합니다.

관련 문제