2011-11-02 161 views
2

我有問題,不知道如何解決它。我相信這是愚蠢的小事:嵌套類,undefined參考,靜態方法

我有3個文件:
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); 
} 

職高中,上面列出的文件位於相同的目錄中。現在當我嘗試鏈接和編譯我收到鏈接器錯誤:

$ 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函數。

鏈接器應將這些引用鏈接到「util.o」文件,其中包含這些函數的實際代碼。但它沒有包含滿足鏈接的函數的.o文件。這就是它所稱的「未定義參考」:「application.o」指向鏈接程序找不到的函數。

2

您必須在構建中包含application.cpp和Util.cpp。

3

您需要編譯(並鏈接)所有的.cpp文件。所以在你的情況下,命令將是

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

更好的是,編寫一個Makefile來爲你做這個。