2011-11-02 112 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来为你做这个。