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 Bar
mewarisi dari struct lain di A
. Maka tidak ada ambiguitas. Hal ini lebih seperti warisan menambahkan segala sesuatu dari A::Foo
ke Bar
termasuk resolusi Foo
untuk A::Foo
. Maaf, saya tidak bisa mengungkapkannya dengan lebih tepat.