通過D.S.Malik的書「使用C++的數據結構」 我有點疑惑關於以下搜索功能,(對於鏈表)派生類中的搜索功能,循環條件
據馬利克,「如果搜索項目是在列表中的我個項目中,while循環執行我次,以下是從書中確切的代碼(沒有評論)。
template <class Type>
bool unorderedLinkList<Type>::search(const Type& searchItem) const
{
nodeType<Type> *current;
bool found = false;
current = first;
while (current != NULL && !found)
if (current->info == searchItem)
found = true;
else
current = current->link;
return found;
}
將這個循環確實停止一旦該項目被發現?
while (current != NULL && !found)
我的直覺告訴我,它會保持與那些去&運營商,但我可能是錯的。這只是書中的一個錯字,還是我錯過了一些東西?
另一個問題是我的編譯器抱怨的以下行。
current = first; //error 'first' was not declared in this scope
因此,要解決這個問題,我
current = searchItem.first;
編譯器取代現在不抱怨,但它從父類訪問權保護的成員? (unorderedLinkList從linkedListType父類,它保護了nodeType<Type> *first
構件繼承)
編輯: 更多代碼:d
template <class Type>
struct nodeType
{
Type info;
nodeType<Type> *link;
};
template <class Type>
class linkedListType
{
public: //some removed for space
virtual bool search(const Type& searchItem) const = 0;
protected:
int count;
nodeType<Type> *first;
nodeType<Type> *last;
private:
void copyList(const linkedListType<Type>& otherList);
//function to make a copy of otherlist and assign to this list
};
編輯: 派生類
template <class Type>
class unorderedLinkedList: public linkedListType<Type>
{
public:
bool search(const Type& searchItem) const;
}
編輯: VS快車編譯我的代碼,但這個網站不會。請幫助? T_T http://ideone.com/SN2R99
由於更換
first
,我有點DERP時刻存在的誤解和它。所以現在發現是真的,!發現不再是不正確的,結束了循環。我會添加更多的代碼來幫助澄清我的第二個問題。 – user2280041 2013-04-23 13:37:35-____- 你說得對,它在VS Express中運行良好。 我試圖用gcc在代碼塊中運行它,它一直給我帶來麻煩。 我一直猶豫移動到VS爲我的編碼,因爲我開始在codeblocks,但我想這是最後一根稻草。 感謝您的幫助,非常感謝! – user2280041 2013-04-23 13:57:37
VS接受它,但你鏈接我的那個網站沒有。它也給編譯器錯誤。在這裏,看看。 :/ http://ideone.com/SN2R99 – user2280041 2013-04-23 14:10:02