gpt4 book ai didi

c++ - 我在这里做错了什么?我的编译中有几个 "no match for operator"错误

转载 作者:行者123 更新时间:2023-11-30 04:19:23 29 4
gpt4 key购买 nike

这些似乎是我唯一的错误。据我了解,如果我将“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

最佳答案

I only needed to overload an operator if I was setting "sortedListClass" equal to another declared "sortedListClass" or if I was asking if they were less than, equal to, not equal to, etc

您正在使用 listItemType 执行这些操作,并且从未为其创建任何运算符。

看看它如何提示诸如 ‘cur->Node::data == city’ 之类的表达式?左侧的类型为 listItemType,右侧的类型为 std::string。编译器不知道您希望它对这两件事做什么。

类似地:

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

该表达式的两边都有类型 listItemType。您需要为该类型定义 operator>

我意识到错误输出冗长而复杂,但您需要的所有信息在某处!

关于c++ - 我在这里做错了什么?我的编译中有几个 "no match for operator"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869179/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com