我有一個通用的鏈接列表,與各種類型的數據一起工作,包括對象和指向對象的指針等,但我在使用列表中的對象時遇到問題派生自抽象類。C++鏈接列表 - 插入對象
我有一個抽象類叫車和2類,是卡爾和卡車,我可以做這樣的事情:
list<vehicle> lv;
vehicle * v1;
vehicle * v2;
v1 = new carr;
v2 = new truck;
cin >> *v1 >> *v2;
//But when I try to insert in the list
lv.insertEnd(*v1);
我有錯誤:
不能分配的抽象對象type'vehicle'
而編譯器顯示錯誤發生在我寫的部分的鏈接列表代碼的insertEnd方法中:
newNode->item = new Item;
這是一個項目的一部分,我需要一個車輛列表和車輛可以carrs,卡車等我有一組指示器指針實現的車輛,但我試圖做到這一點與車輛清單。
你能幫我嗎?
編輯: 該項目是在我的鏈接列表,我會告訴我的insertEnd方法:
template <class Item>
void list<Item>::insertEnd(const Item& item)
{
node<Item> *newNode= new node<Item>;
newNode->item = new Item;
*(newNode->item) = item;
newNode->next = 0;
if(head == 0)
{
head = newNode;
tail = newNode;
_size++;
}
else
{
novoNo->prev = tail;
tail->next = newNode;
tail = newNode;
_size++;
}
}
什麼是「項目」? – paul23
您正在嘗試將'vehicle'實例插入到容器中。但它很抽象。回想一下,容器擁有自己的元素,從而複製他們的輸入。閱讀關於切片。 –
你想製作一個指針列表或對象列表嗎?如果'insertEnd'採用'vehicle',那麼它不能採用'carr'或'truck',而只能採用'vehicle'的實例。 (不幸的是,在C++中創建多態集合非常令人惱火,首先,沒有簡單的方法可以通過給定引用或指針來複制對象)。 –