C++ 嵌套类,未定义引用,静态方法
我有问题,不知道如何解决。我相信这是愚蠢的小事: 我有3个文件: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
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命令中。