我有以下代码没有按预期编译。我有一个具有静态成员函数的类,另一个类包含其尝试使用它的头。它似乎没有用。
static bool validLocation(int _x) // within class A
{
return false;
};
B类包括A类,并在其一个函数中进行以下调用:
if (!(A::validLocation(180)))
continue;
显然,这些都是为了阅读目的而简化,但为什么这是不可接受的?
抱歉模糊不清。至于错误信息:
"A::validLocation(int)", referenced from: B::functionThatCallsThis() in B.o
Symbols not found.
Collect2: ld returned 1 exit status
静态函数是public,如头文件中声明的那样。
答案 0 :(得分:3)
从您提供的错误消息中,我将假设您没有将对象链接在一起,或者您将validLocation()
声明为自由函数,因为我之前没有看到A::
定义。很难说这里的信息量很多。
编辑:
现在错误消息更加清晰,看起来您没有将正确的目标文件包含到链接器中。
答案 1 :(得分:2)
A.o
和B.o
连接在一起以创建二进制文件?听起来好像没有包含A.o
,编译器没有内联静态函数。
此外,您在功能结束时有一个;
,绝对不需要,可能无效(我记不住了)
答案 2 :(得分:0)
当您定义函数validLocation()
时,您是否在单独的文件中定义了.cpp?如果是这样,你需要在函数名之前加上A ::如下:
static bool A::validLocation(int _x) // within class A
{
return false;
};