1

这些似乎是我唯一的错误。据我了解,如果我将“sortedListClass”设置为等于另一个声明的“sortedListClass”,或者如果我询问它们是否小于、等于、不等于等,我只需要重载一个运算符。但这些是用户声明...没有声明“sortedListClasses”所以我很困惑..任何人都可以阐明这些编译错误吗?谢谢!

我将包括我拥有的所有代码,以防其中任何一个对错误有重要意义......

基本上我正在处理带有结构和指针的链表..

这是我的清单.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
4

1 回答 1

2
于 2013-04-07T23:44:32.097 回答