8
我試圖訪問成員變量x in struct 頂部使用底部對象。使用多重繼承時,爲什麼這個限定名稱不明確?
的代碼如下:
#include <cstdio>
struct Top
{
public:
int x = 1;
};
struct Left : public Top
{
int x = 2;
};
struct Right : public Top
{
int x = 3;
};
struct Bottom : public Left, public Right
{
int x = 4;
};
int main()
{
Bottom b;
std::printf("value: %d\n", b.Left::Top::x);
return 0;
}
這給使用gcc 4.8以下錯誤:
main.cpp: In function 'int main()':
main.cpp:27:45: error: 'Top' is an ambiguous base of 'Bottom'
std::printf("value: %d\n", b.Left::Top::x);
^
這是怎麼含糊,我怎麼有資格名稱訪問它?
「Left」和「Right」都從'Top'繼承,並且都有數據成員'x'。因此含糊不清。 – 2014-09-20 19:49:54
它是不明確的,因爲你有'Left'和'Right'作爲'Top'的子類,每個子類定義'x'。如果'Bottom'子類都是這兩個類,那麼你不能從'Left'或'Right'確定'x'。爲了記錄,您的限定名稱不是含糊不清的,您的繼承結構是。 – 2014-09-20 19:51:14
我知道訪問多重繼承鑽石的不合格成員是不明確的。這裏的問題是,爲什麼如果我完全符合條件,它仍然是模棱兩可的。例如,如果我首先靜態地投射到左側,然後到頂端,我可以訪問正確的x值。爲什麼它不適用於合格的名稱? – anoncoder 2014-09-20 20:22:54