我有一个看起来像这样的类:
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
在课堂之外,我调用 Get() 函数。
float foo = classAInstance.Get(i);
我希望这会调用公共版本,但 Visual Studio 会出错:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
当注释掉受保护的重载并删除对它的所有引用时,代码会编译。
当一个可访问的成员可用时,为什么编译器会尝试使用不可访问的成员?是否有一种公认的方式来强制编译器选择正确的重载?是否在某处引用了成员函数的解析规则?