【问题标题】:Nested class, undefined reference, static method嵌套类、未定义引用、静态方法
【发布时间】:2011-11-02 21:07:02
【问题描述】:

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

我有 3 个文件:
实用程序.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;
}

应用程序.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

搞砸了什么?

【问题讨论】:

  • 将 util.cpp 添加到编译命令中。

标签: c++ class static nested


【解决方案1】:

您告诉 g++ 编译您的“主”程序,但没有告诉它有关 Util 模块的信息。将Util.cpp 添加到命令行,一切正常。

编译器生成了一个“application.o”文件,引用Util::bitparser函数。

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

【讨论】:

    【解决方案2】:

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

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

    更好的是,编写一个 Makefile 来为您执行此操作。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 1970-01-01
        相关资源
        最近更新 更多