Saya memiliki kode berikut:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
Kompiler C ++ mengeluh pada "c = foo.b" karena A :: Foo tidak memiliki anggota bernama b. Jika saya mengubah jenis parameter Bar dengan :: Foo berfungsi.
Pertanyaan saya adalah apa rasional di balik perilaku ini (saya kira itu ada hubungannya dengan fakta bahwa warisan membuat Bar memasuki ruang nama A tetapi saya tidak dapat menemukan dokumentasi untuk mendukung teori ini.
A, yang dapat Anda lihat jika Anda membiarkan Barmewarisi dari struct lain di A. Maka tidak ada ambiguitas. Hal ini lebih seperti warisan menambahkan segala sesuatu dari A::Fooke Bartermasuk resolusi Foountuk A::Foo. Maaf, saya tidak bisa mengungkapkannya dengan lebih tepat.