因此,對於一個項目,我使用帶有頭部和尾部指針的鏈表實現了一個列表類型作爲模板類。當我構建列表我用下面的代碼錯誤:沒有匹配的構造函數用於初始化'列表<double> ::節點'
template <class Item>
List<Item>::List()
{
if (typeid(Item) == typeid(string))
{
head = new node("0", NULL, NULL);
tail = new node("0", NULL, NULL);
}
else
{
head = new node(0, NULL, NULL);
tail = new node(0, NULL, NULL);
}
head->next = tail;
tail->prev = head;
cursor = head;
size = 0;
}
的typeid的if語句是存在的,因此如果我做字符串列表中的節點構造將獲得適當的字符串值,編譯器不會拋出一個合適的。這工作正常,但是當我編輯我的代碼,以便它也會初始化一個雙打列表編譯器拋出此錯誤:
/List.h:59:21:錯誤:沒有匹配的構造函數的初始化'列表: :節點' head =新節點(「0」,NULL,NULL);
據我可以告訴編譯器忽略我已放置的if語句,但我不知道爲什麼。如果我刪除了允許字符串的代碼,並且只使用else塊中的語句,那麼雙精度,整數,字符等工作正常,但然後字符串將無法工作。我已經驗證了if語句爲什麼類型的Item返回了正確的值,所以我很難理解編譯器爲什麼不喜歡這個。
我很確定有更好的方法可以做到這一點,但任何人都可以提供解決方案來解決這段特定的代碼?任何答案表示讚賞。
您可以調用Item的構造函數作爲Item()來初始化節點對象。 head = new node(Item(),NULL,NULL) – sajas
爲什麼你需要將字符串初始化爲'「0」'? –