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