静态成员函数未按预期运行

时间:2011-02-24 17:37:34

标签: c++

我有以下代码没有按预期编译。我有一个具有静态成员函数的类,另一个类包含其尝试使用它的头。它似乎没有用。

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,如头文件中声明的那样。

3 个答案:

答案 0 :(得分:3)

从您提供的错误消息中,我将假设您没有将对象链接在一起,或者您将validLocation()声明为自由函数,因为我之前没有看到A::定义。很难说这里的信息量很多。

编辑:

现在错误消息更加清晰,看起来您没有将正确的目标文件包含到链接器中。

答案 1 :(得分:2)

编辑:您是否记得将A.oB.o连接在一起以创建二进制文件?听起来好像没有包含A.o,编译器没有内联静态函数。

此外,您在功能结束时有一个;,绝对不需要,可能无效(我记不住了)

答案 2 :(得分:0)

当您定义函数validLocation()时,您是否在单独的文件中定义了.cpp?如果是这样,你需要在函数名之前加上A ::如下:

static bool A::validLocation(int _x) // within class A
{ 
    return false;
};