Aşağıdaki kodu göz önünde bulundurun:Neden bir kullanarak-beyan çalışma elmas problemli m çözmek için geliyor?
struct A
{
void f()
{
}
};
struct B1 : A
{
};
struct B2 : A
{
};
struct C : B1, B2
{
void f() // works
{
B1::f();
}
//using B1::f; // does not work
//using B1::A::f; // does not work as well
};
int main()
{
C c;
c.f();
return 0;
}
Ben nazikçe ("sanal devralma kullanmak") elmas sorunu çözmek için nasıl bir standart cevap yapıştırmak kopyalamak değil istiyoruz. Ne ben burada soruyorum bu durumda bir kullanma-beyanname işi yapmaz nedeni budur. Kesin derleyici hatadır: Bir kullanarak-bildirisinin bu örnekten çalışmalıdır izlenimini aldım
In function 'int main()':
prog.cpp:31:6: error: 'A' is an ambiguous base of 'C'
c.f();
:
struct A
{
void f()
{
}
};
struct B
{
void f()
{
}
};
struct C : A, B
{
using A::f;
};
int main()
{
C c;
c.f(); // will call A::f
return 0;
}
Geçersiz kılmak için sanal bir yöntem olarak f: – progsource
Hiçbir şeyi geçersiz kılmıyorum. Gizleniyorum. – gd1
[Burada çalışır] (http://coliru.stacked-crooked.com/a/3e301b60717fd4dc). Hangi derleyiciyi kullanıyorsunuz? – 0x499602D2