C ++:未定义的函数引用,参数显示已更改

时间:2014-04-30 18:36:59

标签: c++

我对此错误消息感到困惑。 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);

哦,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的函数声明,并且在cpp文件(例如foo.h和foo.cpp)中定义。编译器将定义一个符号来标识您的函数,并将函数代码放在一个目标文件中(foo.o)。

该函数是从另一个模块(main.cpp)引用。编译器通过#include d声明将看到您的main需要对该函数的引用 - 它将留下一个需要解析的未解析符号,以便您的代码能够执行。< / p>

这个未解决的符号需要由链接器解决;你必须告诉链接器它需要在一堆目标文件(main.o和foo.o)中查找未解析的符号。

可能,您没有告诉链接器使用包含您的函数体的目标文件。

答案 1 :(得分:1)

那是因为有真正的类型和别名,例如

typedef long int32;

别名未显示在真实签名中,该签名将始终包含所使用的真实类型。

您看到的错误与此无关。它很可能是链接器错误,因为您没有链接包含该方法定义的文件。怎么解决?这取决于您使用的是哪个编译器/构建系统?您能否显示用于构建应用程序的命令?