我对此错误消息感到困惑。 C ++新手,并尝试对构建进行故障排除。
为什么错误说char const *和long?我看不到这些被使用过的地方。 (它应该是const char *和int32)。参数看起来在错误中发生了变化。
错误说
undefined reference to `JobContainer::UpdateStatus(char const*, long)'
但原型是
void UpdateStatus(const char* status, int32 perc_complete=-1);
定义是:
void JobContainer::UpdateStatus(const char* status, int32 perc_complete/*=-1*/)
电话是:
static const char* status_ok = "OK";
JOB->UpdateStatus(status_ok, (int32) 0);
哦,我该如何解决这个问题?
答案 0 :(得分:2)
您的函数声明,并且在cpp文件(例如foo.h和foo.cpp)中定义。编译器将定义一个符号来标识您的函数,并将函数代码放在一个目标文件中(foo.o)。
该函数是从另一个模块(main.cpp)引用。编译器通过#include
d声明将看到您的main
需要对该函数的引用 - 它将留下一个需要解析的未解析符号,以便您的代码能够执行。< / p>
这个未解决的符号需要由链接器解决;你必须告诉链接器它需要在一堆目标文件(main.o和foo.o)中查找未解析的符号。
可能,您没有告诉链接器使用包含您的函数体的目标文件。
答案 1 :(得分:1)
那是因为有真正的类型和别名,例如
typedef long int32;
别名未显示在真实签名中,该签名将始终包含所使用的真实类型。
您看到的错误与此无关。它很可能是链接器错误,因为您没有链接包含该方法定义的文件。怎么解决?这取决于您使用的是哪个编译器/构建系统?您能否显示用于构建应用程序的命令?