我一直试图说服自己,相同类型的对象可以访问彼此的私有(private)数据成员。我写了一些我认为可以帮助我更好地了解发生了什么的代码,但是现在我从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;
}

最佳答案

combinationShared类的成员函数。因此,只能在Shared实例上调用它。调用combination时,没有指定要调用哪个对象:

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

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

因此,您必须指定一个实例:
cout << sharedObj1.combination(sharedObj1, sharedObj2) << endl;

但是,在这种情况下,在哪个实例上调用都无关紧要,因此您应该将combination设置为静态,这样就可以
cout << Shared::combination(sharedObj1, sharedObj2) << endl;

10-08 05:37