C++多重继承私有成员模糊访问
C++ multiple inheritance private member ambigious access
以下代码:
class A1 {
public:
int x;
};
class A2 {
private:
int x() { return 67; }
};
class M : public A1, public A2 {};
int main() {
M m;
m.x;
}
编译错误:
error C2385: ambiguous access of 'x'
note: could be the 'x' in base 'A1'
note: or could be the 'x' in base 'A2'
但是为什么呢?只有 A1::x
应该对 M 可见。
A2::x
应该是纯本地的。
在C++中,执行name-lookup happens before member access checking。因此,name-lookup(在你的情况下不合格)找到两个名字,这是不明确的。
您可以使用限定名称来消除歧义:
int main() {
M m;
m.A1::x; //qualifed name-lookup
}
以下代码:
class A1 {
public:
int x;
};
class A2 {
private:
int x() { return 67; }
};
class M : public A1, public A2 {};
int main() {
M m;
m.x;
}
编译错误:
error C2385: ambiguous access of 'x'
note: could be the 'x' in base 'A1'
note: or could be the 'x' in base 'A2'
但是为什么呢?只有 A1::x
应该对 M 可见。
A2::x
应该是纯本地的。
在C++中,执行name-lookup happens before member access checking。因此,name-lookup(在你的情况下不合格)找到两个名字,这是不明确的。
您可以使用限定名称来消除歧义:
int main() {
M m;
m.A1::x; //qualifed name-lookup
}