[英]Vectors of Pointers, inheritance
嗨,我是C ++初學者,剛遇到一個我不知道如何解決的問題
我有兩個類,這是頭文件:
class A
{
public:
int i;
A(int a);
};
class B: public A
{
public:
string str;
B(int a, string b);
};
那么我想在main中創建一個向量來存儲A類或B類
vector<A*> vec;
A objectOne(1);
B objectTwo(2, "hi");
vec.push_back(&objectOne);
vec.push_back(&objectTwo);
cout << vec.at(1)->i; //this is fine
cout << vec.at(1)->str; //ERROR here
我真的很困惑,我檢查了網站和內容,但我只是不知道該如何解決,請幫忙
提前致謝
之所以不起作用,是因為向量中的對象屬於(靜態)類型A
在這種情況下,靜態意味着編譯時。 編譯器無法知道vec
產生的任何內容都將是A
的任何特定子類。 這不是合法的事情,因此沒有辦法使其按原樣工作。 您可以具有B
的集合並訪問str
成員,而不能訪問A
的集合。
這與Python等語言相反,在Python中,會在運行時在對象的字典中查找成員。 C ++是靜態類型的,因此在編譯代碼時必須進行所有類型檢查。
首先,發布完整的錯誤消息。
其次,如果您有A*
,則編譯器無法推斷出某個子類(在本例中為B)具有名為str
的字段,因此您將獲得編譯器錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.