我在父類中有一個變數 b,當我嘗試從 sum3 類訪問變數 b 時,它顯示了一個模棱兩可的 b 錯誤。如果我從繼承中洗掉總和,它將給出“clas.cpp|25|error: 'int sum::b' is inaccessible in this context|”錯誤怎么辦?
#include<iostream>
using namespace std;
class sum
{
public:
int b=8;
};
class sum2:sum
{
public:
int c=4;
};
class sum3:sum2,sum
{
public:
int h=9;
void add()
{
int l;
l=h c b;
cout<<l;
}
};
int main()
{
sum3 c;
c.add();
}
uj5u.com熱心網友回復:
這是因為你來自繼承sum2和sum類,但sum2被繼承sum所以它繼承了變數b也因此,當你要使用的變數b類的內部sum3編譯器不知道你想要的變數,因為有一類sum2和一個sum同名的班級b。
解決方案之一是在類內部使用范圍決議運算子,sum3如下所示:
class sum3:sum2,sum
{
public:
int h=9;
void add()
{
int l;
l=h c sum2::b;
cout<<l;
}
};
這通過告訴編譯器我打算使用哪個變數來消除歧義,在這種情況下它是sum2變數。
注意:
這稱為鉆石問題,如果您想進一步閱讀并了解如何避免它們,它會發生在多重繼承情況下,您可以使用此鏈接:如何在使用多重繼承時避免死亡鉆石?
uj5u.com熱心網友回復:
你需要寫
class sum2 : virtual sum
和
class sum3 : sum2, virtual sum
這樣你只有一個b中sum2和sum3,所以避免了歧義。
更多細節在 C 中,什么是虛擬基類?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407830.html
標籤:
