Takip koduna sahibim:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
A :: Foo'nun b adlı bir üyesi olmadığı için C ++ derleyicileri "c = foo.b" dosyasında şikayetçi olur. Bar parametresinin türünü :: Foo ile değiştirirsem çalışır.
Benim sorum bu davranışın ardındaki mantıklı şey (sanırım miras Bar'ın A ad alanına girmesini sağlıyor, ancak bu teoriyi destekleyen herhangi bir belge bulamıyorum.
A
alıp almadığınızı görebileceğiniz ad alanına girmez . O zaman belirsizlik yoktur. Daha miras gibidir herşeyi ekler için çözünürlüğünü dahil etmekBar
A
A::Foo
Bar
Foo
A::Foo
. Üzgünüm, daha kesin ifade edemiyorum.