我想實現一個使用指針的List類,並試圖實現一個函數LOCATE(T x)其中T代表模板並返回元素x的第一個位置(如果找到),否則返回最後一個位置+ 1在C++模板中使用運算符
我的功能代碼是
template<class T>
int List<T>::locate(T n) const
{
int size = end();
Node<T> * p = head_;
for (int i = 0; i < size; i++)
{
if (p->data() == n) // fails on this line
return i;
p = p->link();
}
return size; // if no match found
}
我初始化我的名單與T作爲字符串作爲
List<string> myList;
,但我得到一個錯誤信息
'布爾的std ::運算符==(常量的std :: istreambuf_iterator < _Elem,_Traits> &,常量的std :: istreambuf_iterator < _Elem,_Traits> &)':不能推導出模板參數的「常量性病:: istreambuf_iterator < _Elem,_Traits> &'from'std :: string
即使爲字符串類定義了'=='運算符,爲什麼會出現錯誤? '
爲節點的編碼是
template<typename T>
class Node
{
public:
// Constructors
Node();
Node(T d, Node<T> * l = NULL);
//Inspectors
T data() const;
Node<T> * link() const;
// Mutators
void data(T d); // assigns new value to Node
void link(Node<T> * l); // points this Node to a different one
// Destructor
~Node();
private:
Node<T> * link_;
T data_;
};
template<typename T>
T Node<T>::data() const
{
return data_;
}
template<typename T>
Node<T>* Node<T>::link() const
{
return link_;
}
調用代碼
List<string> test;
test.add("abc");
cout << test.locate("abc") << endl;
你可以發表節點的代碼? – rlbond 2009-07-17 05:27:46
你對節點的定義是什麼樣的?而完整的調用代碼,以「列表 myList;」開頭的代碼,如上所示? 謝謝。 –
2009-07-17 05:30:46
剛剛發佈節點的定義和調用代碼 –
Jaelebi
2009-07-17 05:35:01