Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 嵌套类,未定义引用,静态方法_C++_Class_Static_Nested - Fatal编程技术网

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

C++ 嵌套类,未定义引用,静态方法,c++,class,static,nested,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::BitP

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

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

搞砸了什么?

你让g++编译你的“主”程序,但没有告诉它关于Util模块的事。将
Util.cpp
添加到命令行,所有操作都会正常工作

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


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

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

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

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

更好的方法是编写一个Makefile来完成这项工作。

将util.cpp添加到compile命令中。