C++ 完全限定静态成员变量中的模糊性
在这个示例代码中,有两个句子显示相同的静态变量。第一个没有歧义,但第二个有歧义,为什么C++ 完全限定静态成员变量中的模糊性,c++,multiple-inheritance,fully-qualified-naming,C++,Multiple Inheritance,Fully Qualified Naming,在这个示例代码中,有两个句子显示相同的静态变量。第一个没有歧义,但第二个有歧义,为什么 #include <iostream> using namespace std; struct A { static const char a = 'a'; }; struct B : public A { }; struct C : public A { }; struct G : public B, public C { }; int main() { G v; cou
#include <iostream>
using namespace std;
struct A { static const char a = 'a'; };
struct B : public A { };
struct C : public A { };
struct G : public B, public C { };
int main()
{
G v;
cout << G::B::A::a << endl;
cout << v.B::A::a << endl;
}
#包括
使用名称空间std;
结构A{static const char A='A';};
结构B:公共A{};
结构C:公共A{};
结构G:公共B,公共C{};
int main()
{
gV;
cout这显然是GCC中的一个bug,正如a建议您报告的那样。但是,在修复之前,您可以使用如下讨厌的解决方法:
std::cout << static_cast<B &>(v).A::a;
std::我知道我大约一个月前看到过类似的东西。我相信它不知道在v
案例中使用哪一个父级。正在尝试找到它。这可以通过clang成功编译。@Peregring lk,大约容易阅读和理解20倍。你的大多数示例都是不相关的噪音,只是模糊了事物。EDG接受它oo。请报告一个GCC错误(如果您找不到现有的错误),并提供最少的示例(不是您冗长的原始示例)。谢谢。@JonathanWakely,我认为,您澄清的示例值得回答。
std::cout << static_cast<B &>(v).A::a;