我有问题,不知道如何解决它。我相信这是愚蠢的琐事:
我有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 :(得分: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。