In diesem Beispielcode gibt es zwei Sätze, die die gleiche statische Variable zeigen. Der erste gibt keine Zweideutigkeit, aber der zweite, warum?Mehrdeutigkeit in einer vollständig qualifizierten statischen Membervariablen
#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;
}
GCC Fehler (nach einigen Kommentaren, gibt es keine Zweideutigkeit in Klirren):
main.cpp:15:18: error: 'A' is an ambiguous base of 'G'
cout << v.B::A::a << endl;
Ich weiß, dass ich so etwas vor einem Monat gesehen habe. Ich glaube, dass es nicht weiß, welches Elternteil im "v" -Fall zu verwenden ist. Versuche es zu finden. – NathanOliver
@barakmanos Genau, ich erforsche den Fall, wenn ich keine virtuelle Vererbung brauche. –
Dies kompiliert erfolgreich mit clang. – interjay