操作符重载-没有匹配的' Operator != '(操作数类型为

Operator Overloading - no match for ‘operator!=’ (operand types are

本文关键字:操作数 类型 Operator 重载 操作符      更新时间:2023-10-16

我是一个在大学学习c++的新手,在我的一个作业中,我总是遇到一个错误,我不知道如何解决,如果你的资深和/或天才可以帮助我/推动我在正确的方向,我将不胜感激。

我似乎有一个问题在实现我的类函数,特别是操作符重载。下面是我的头文件:

#ifndef LIBRARY_H
#define LIBRARY_H
#include "book.h"
#include <iostream>
#include <string>
using namespace std;
class Library;
class Library
{
    private:
        string name;
        Book** books;
        int librarySize;
        int numBooks;
    public:
        //Constructor, Copy constructor and Destructor
        Library(string a);
        Library(const Library& obj);
        ~Library();
        //Operator overloads
        Library& operator+=( Book right);
        Library& operator-=(Book right);
        Library& operator=(const Library &right);
        Library& operator++(int);
        Library& operator--();
        //Accessors
        Book* getBook(string);
        bool isFull();
        void print();

};
#endif

错误似乎来自这里在我的。cpp文件:

#include"library.h"
#include "book.h"
#include <iostream>
#include <string>

 Library::Library(string a)
{
    name = a;
}
Library::Library(const Library& obj)
{
    name = obj.name;
    librarySize = obj.librarySize;
    numBooks = obj.numBooks;
    //Copy Books* array
    for(int x=0; x!= librarySize; x++)
        *(books+x) = *(obj.books+x);
}
//Operator overloads
Library& Library::operator+=( Book right)
{
    if(numBooks == librarySize)
         cout<<"Library is full!n";
    else
    {
        numBooks++;     
        *books[numBooks] = right;
    }
    return *this;
}

Library& Library::operator-=(Book right)
{
    if(numBooks != 0)
    {
        for(int x=0; x!= numBooks; x++)
        {
            if(*books[x] != right){}
            else
                *books[x] = "";
        }
    }
    else
        cout<<"Library is empty!n";
    return *this;
}
Library& Library::operator=(const Library &right)
{
    name = right.name;
    librarySize = right.librarySize;
    numBooks = right.numBooks;
    for(int x=0; x!= librarySize; x++)
        *(books+x) = *(right.books+x);
    return *this;
}
Library& Library::operator++(int)
{
    librarySize++;
    return *this;
}
Library& Library::operator--()
{
    if(numBooks == librarySize)
    {   
        *books[numBooks] = right;
        numBooks--;
    }
    librarySize--;
    return *this;
}

我得到这个错误,后面跟着一大堆"note:"s

root@kali:~/Desktop/Prac3# g++ -std=c++11 -c library.cpp library.h
library.cpp: In member function ‘Library& Library::operator-=(Book)’:
library.cpp:48:17: error: no match for ‘operator!=’ (operand types are ‘Book’ and ‘Book’)

在过去的两天里,我一直在寻找答案,但我的教授和互联网都没有给我一个解决方案。我也尝试了不同的方法做同样的事情,但我得到了其他的错误以及这个。虽然当我删除"-="重载时,它似乎没有给我所有的注释,它只是给我上面的错误。

提前感谢。

(我对整个"博客"程序不熟悉,所以如果我犯了任何网络礼仪错误,或者如果你需要更多信息,请评论,最好不要使用不良语言:)

在-=操作符重载实现中,您将比较两个book是否为!=。似乎编译器找不到这个的任何实现,所以我假设您没有为Book.

编写!=或==重载。
相关文章: