除了课程之前和课程之前,还需要在其他任何地方声明函数吗?

时间:2016-10-02 19:25:16

标签: c++ xcode c++11

我一直试图说服自己,相同类型的对象可以访问其他私人数据成员。我写了一些代码,我认为这些代码可以帮助我更好地理解发生了什么,但现在我从XCODE7(只有1)收到一个错误,表示我正在使用未声明的标识符"组合。"

如果有人能帮我理解我的代码出错的地方,我很乐意学习。

如果正确运行,我的代码应该只打印false。

#include <iostream>
using std::cout;
using std::endl;

class Shared {
public:
    bool combination(Shared& a, Shared& b);
private:
    int useless{ 0 };
    int limitless{ 1 };
};

bool Shared::combination(Shared& a,Shared& b){
    return (a.useless > b.limitless);
}

int main() {

    Shared sharedObj1;
    Shared sharedObj2;

    cout << combination(sharedObj1, sharedObj2) << endl;

    return 0; 
}

1 个答案:

答案 0 :(得分:1)

combination是类Shared的成员函数。因此,它只能在Shared的实例上调用。当您呼叫combination时,您没有指定要将其称为哪个对象:

cout <<    combination(sharedObj1, sharedObj2) << endl;
        ^^^
       Instance?

编译器抱怨,因为它认为你想调用一个名为combination的函数,但没有。

因此,您必须指定一个实例:

cout << sharedObj1.combination(sharedObj1, sharedObj2) << endl;

但是,在这种情况下,调用它的实例并不重要,所以你应该combination静态,所以你可以这样做

cout << Shared::combination(sharedObj1, sharedObj2) << endl;