我一直试图说服自己,相同类型的对象可以访问彼此的私有(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;
}
最佳答案
combination
是Shared
类的成员函数。因此,只能在Shared
实例上调用它。调用combination
时,没有指定要调用哪个对象:
cout << combination(sharedObj1, sharedObj2) << endl;
^^^
Instance?
编译器抱怨是因为它认为您想调用一个称为
combination
的函数,但是没有。因此,您必须指定一个实例:
cout << sharedObj1.combination(sharedObj1, sharedObj2) << endl;
但是,在这种情况下,在哪个实例上调用都无关紧要,因此您应该将
combination
设置为静态,这样就可以cout << Shared::combination(sharedObj1, sharedObj2) << endl;