我正在為我的大學制作一個專案,其中我正在實施工廠設計,但問題是我無法回傳物件的地址,它給出了錯誤轉換“不允許將 C 轉換為無法訪問的基類”。
#include<iostream>
using namespace std;
class card
{
protected:
int fee;
int limit;
public:
virtual void setvar() = 0;
};
class silver : card
{
void setvar()
{
fee = 500;
limit = 10000;
}
};
class gold : card
{
void setvar()
{
fee = 1000;
limit = 20000;
}
};
class platinum : card
{
void setvar()
{
fee = 2000;
limit = 40000;
}
};
此處在此類 FactoryDe??sign 的回傳行中給出了錯誤。
class factorydesign
{
private :
factorydesign();
public:
static card* getcard(int c)
{
if (c == 0)
{
return new silver();
}
else if (c == 1)
{
return new gold();
}
else if (c == 2)
{
return new platinum();
}
}
};
int main()
{
int choice;
cout << "0 : Silver card\n1 : Golden Card\n2 : Platinum card \n";
cin >> choice;
card* obj;
obj = factorydesign::getcard(choice);
return 0;
}
任何人都可以詳細解釋為什么會發生這種情況嗎?
uj5u.com熱心網友回復:
您需要公開繼承它(class默認為private)
class silver : public card
{
//...
};
你不能在外面訪問私人基地,因為它是私人的(就像私人成員一樣)
uj5u.com熱心網友回復:
忽略問題中所有不相關的代碼,問題是:
class base {};
class derived : base {};
base *ptr = new derived;
derived繼承私下從base,所以,作為錯誤訊息說,轉換是derived*通過創建new derived一個base*是不合法的。修復只是公開繼承:
class derived : public base {};
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/382471.html
上一篇:從向量中洗掉一組專案?[復制]
