2013-04-07 57 views
1

這些似乎是我唯一的錯誤。根據我的理解,如果我將「sortedListClass」設置爲等於另一個聲明的「sortedListClass」,或者如果我問他們是否小於,等於,不等於等等,我只需要重載操作符。但這些是用戶聲明...沒有聲明「sortedListClasses」所以我很困惑..任何人都可以闡明這些編譯錯誤?謝謝!我在這裏做錯了什麼?在我的編譯中有幾個「不匹配操作員」的錯誤

我會包括所有的我都櫃面任何具有意義的錯誤代碼......

基本上我處理與結構和指針鏈表..

這裏是我的list.h:

#ifndef LIST_H 
#define LIST_H 

struct cities 
{ 
    string city;  
}; 
typedef cities listItemType; 
typedef struct Node* nodePtr; 
struct Node 
{ 
    listItemType data; 
    nodePtr next; 
}; 

#endif 

這裏是我的sortedListClass.h:

#include <iostream> 
#include <fstream> 

using namespace std; 

#include "list.h" 


#ifndef sortedList_Class 
#define sortedList_Class 

class sortedListClass 
{ 

    private: 
     int size; 
     nodePtr Head; 

    public: 
     //Constructors and Destructor 
     sortedListClass(); 
     sortedListClass(const sortedListClass& L); 
     ~sortedListClass(); 

     //List operations 
     void ListInsert(listItemType NewItem); 
     void ListDelete(); 
     void RetrieveCity(); 
     void PrintList(); 
     int ListLength() const; 
     bool ListIsEmpty() const; 
}; //End Class 
#endif 

這裏是我sortedListClass.cpp:

//Sorted List Class 
//Contains function definitions for actions towards the cities Linked List 

#include "sortedListClass.h" 
#include <iostream> 
#include <cstdlib> 
#include <string> 

sortedListClass::sortedListClass() 
{ 
    size = 0; 
    Head = NULL; 
} 

sortedListClass::sortedListClass(const sortedListClass& List) 
{ 
    if(List.Head == NULL) 
     Head = NULL; 
    else 
    { 
     Head = new Node; 
     Head->data = List.Head->data; 

     nodePtr NewPtr = Head; 

     for(nodePtr OrigPtr = List.Head -> next; OrigPtr != NULL; OrigPtr = OrigPtr-> next) 
     { 
      NewPtr-> next = new Node; 
      NewPtr = NewPtr -> next; 
      NewPtr -> data = OrigPtr -> data; 
     } 
      NewPtr -> next = NULL; 
    } 
} 

sortedListClass::~sortedListClass() 
{ 
    bool success; 
    while(!ListIsEmpty()) 
     ListDelete(); 
} 

bool sortedListClass::ListIsEmpty() const 
{ 
    return bool(size == 0); 
} 

int sortedListClass::ListLength() const 
{ 
    return size; 
} 

void sortedListClass::RetrieveCity() 
{ 
    string city; 
    bool success; 
    cout <<"Input a city name: "; 
    cin >> city; 
    cout << endl; 
    nodePtr cur = Head; 
    while(cur != NULL) 
    { 
     if(cur->data == city) 
     { 
      cout <<"This city is found" << endl; 
      success = true; 
     } 
     cur = cur->next; 
    } 
    if(!success) 
     cout <<"This city is not served" << endl; 

} 

void sortedListClass::PrintList() 
{ 
    nodePtr cur = Head; 
    cout << "Number of cities: " << size << endl; 
    while(cur!= NULL) 
    { 
     cout <<cur->data; 
     cur = cur->next; 
    } 
} 

void sortedListClass::ListInsert(listItemType Item) 
{ 
    nodePtr newNode = new Node; 
    newNode -> data = Item; 
    newNode->next = NULL; 
    if(Head = NULL) 
     Head = newNode; 
    else if (Item < Head->data) 
    { 
     newNode->next = Head; 
     Head = newNode; 
    } 

    nodePtr curr = Head, prev = Head; 
    while((newNode->data > curr->data) && (curr != NULL)) 
    { 
     prev = curr; 
     curr = curr -> next; 
    } 

    if(curr->next == NULL) 
    { 
     curr->next = newNode; 
     newNode->next = NULL; 
    } 
    else if(curr->data > newNode->data) 
    { 
     newNode->next = curr; 
     prev->next = newNode; 
    } 
} 

void sortedListClass::ListDelete() 
{ 
    bool success = false; 
    string city; 
    cout << "Enter a city name to delete from the list: " << endl; 
    cin >> city; 
    nodePtr p = new Node; 
    nodePtr curr, prev; 
    curr = Head; 
    prev = Head; 
    p -> data = city; 
    p -> next = NULL; 
    if(Head == NULL) 
     cout <<"Unable to delete anything, list is empty." << endl; 
    else 
    { 
     while(curr->next != NULL) 
     { 
      if(curr -> data == p -> data) 
      { 
       prev->next = curr->next; 
       curr->next = NULL; 
       delete curr; 
       curr = NULL; 
       success = true; 
      } 
      else 
      prev = curr; 
      curr = curr->next; 
     } 
    } 
    if(!success) 
     cout <<"This city does not exist. Deletion cannot be performed." << endl; 

} 

,這裏是我得到的錯誤...

sortedListClass.cpp: In member function ‘void sortedListClass::RetrieveCity()’: 
sortedListClass.cpp:63: error: no match for ‘operator==’ in ‘cur->Node::data == city’ 
sortedListClass.cpp: In member function ‘void sortedListClass::PrintList()’: 
sortedListClass.cpp:81: error: no match for ‘operator<<’ in ‘std::cout << cur->Node::data’ 
/usr/include/c++/4.4/ostream:108: note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:117: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:127: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:165: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:169: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:173: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/bits/ostream.tcc:91: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:180: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/bits/ostream.tcc:105: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:191: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:200: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:204: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:209: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:213: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:221: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/ostream:225: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>] 
/usr/include/c++/4.4/bits/ostream.tcc:119: note:     std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>] 
sortedListClass.cpp: In member function ‘void sortedListClass::ListInsert(listItemType)’: 
sortedListClass.cpp:93: error: no match for ‘operator<’ in ‘Item < ((sortedListClass*)this)->sortedListClass::Head->Node::data’ 
sortedListClass.cpp:100: error: no match for ‘operator>’ in ‘newNode->Node::data > curr->Node::data’ 
sortedListClass.cpp:111: error: no match for ‘operator>’ in ‘curr->Node::data > newNode->Node::data’ 
sortedListClass.cpp: In member function ‘void sortedListClass::ListDelete()’: 
sortedListClass.cpp:128: error: no match for ‘operator=’ in ‘p->Node::data = city’ 
list.h:5: note: candidates are: cities& cities::operator=(const cities&) 
sortedListClass.cpp:136: error: no match for ‘operator==’ in ‘curr->Node::data == p->Node::data’ 
[1]+ Done     scite sortedListClass.cpp 
+0

製作一個[testcase](http://sscce.org)是您的第一個調試步驟,不會發布到互聯網。 :) – 2013-04-07 23:42:58

+0

我想在第4行的函數'ListInsert'中找到一個bug。你是否真的意指'if(Head = NULL)Head = newNode;'而不是if(Head == NULL)Head = newNode; ? – 2013-04-08 00:52:30

回答

2

我只需要重載運營商,如果我設置「sortedListClass」等於另一個宣稱「sortedListClass」,或者如果我是問如果他們是小於,等於,不等於等

你做這些事情listItemType,和從來沒有爲它創建任何操作符。

看看它是如何抱怨如‘cur->Node::data == city’表達式?左側的型號爲listItemType,右側的型號爲std::string。編譯器不知道你想要這兩件事情。

類似地:

error: no match for ‘operator>’ in ‘newNode->Node::data > curr->Node::data’ 

該表達的兩側具有類型listItemType。您需要爲該類型定義operator>

我意識到錯誤輸出是冗長而複雜的,但是您需要的所有信息在那裏都是

相關問題