0
我一直在更新舊的模板鏈表,以便能夠採取複雜的數據類型。但我不知道如何使它能夠返回節點類中的數據元素。目前我的節點類的代碼看起來是這樣的:C++模板鏈表獲取複雜數據類型的數據元素
using namespace std;
#ifndef Node_A
#define Node_A
template <class T>
class Node
{
public:
Node();
~Node();
T getData();
Node* getNext();
void setData(T);
void setNext(Node*);
private:
Node *next;
T data;
};
template <class T>
Node<T>::Node()
{
next = NULL;
return;
}
template <class T>
Node<T>::~Node()
{
return;
}
template <class T>
T Node<T>::getData()
{
return data;
}
template <class T>
Node<T>* Node<T>::getNext()
{
return next;
}
template <class T>
void Node<T>::setData(T a)
{
data = a;
return;
}
template <class T>
void Node<T>::setNext(Node* a)
{
next = a;
return;
}
#endif
現在,如果數據類型T是一種原始的這個工作完全正常,但如果你使用一個非原始好比說一個結構,將給予一個運行時錯誤。我認爲,因爲結構不爲=運算符做運算符重載。有沒有一種簡單的方法來解決這個問題,而不需要徹底檢修課堂?
你想通過值複製元素,還是隻想指向鏈表中的元素? – merlin2011
好點。最終,列表類必須實現某種搜索,它將使用getData將列表類中的數據與從節點類檢索到的元素進行比較。我希望鏈表的所有處理都在列表或節點類的main之外完成。但是要操縱一個結構體,我需要一些關於它的結構的信息,在主體創建它的一個實例之前我不知道它的結構。除非我錯過了一些更高層次的編碼策略。 – user3390349
這個:'Node :: Node()'不應該是一個選項。如果你正在做的是默認構造數據,那麼在構建包含模板數據的節點時有什麼意義?這個節點模板在你的鏈表中的使用*應該是相當透露你需要什麼以及你不需要什麼。關於賦值運算符,除非類型T或其成員之一特別*不可賦值,否則這應該起作用。但是,您可能希望採用移動語義來減少所有不必要的複製。無論如何,發佈代碼**如何重現問題**。 –
WhozCraig