嵌套类,未定义引用,静态方法

时间:2011-11-02 21:07:02

标签: c++ class static nested

我有问题,不知道如何解决它。我相信这是愚蠢的琐事:

我有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

什么搞砸了?

3 个答案:

答案 0 :(得分:4)

你告诉g ++编译你的'main'程序,但没有告诉它关于Util模块。将Util.cpp添加到命令行,一切都应该正常。

编译器已经创建了一个“application.o”文件,引用Util::bitparser函数。

链接器应将这些引用“链接”到“util.o”文件,其中包含这些函数的实际代码。但它没有包含满足链接功能的.o文件。这就是它所谓的“未定义引用”:“application.o”引用到链接器找不到的函数。

答案 1 :(得分:3)

您需要编译(并链接)所有.cpp个文件。所以在你的情况下,命令将是

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

更好的是,写一个Makefile来为你做这个。

答案 2 :(得分:2)

您必须在构建中包含application.cpp和Util.cpp。