2016-09-02 5 views
-2

です。私は大学レベルでC++を学ぶ過程でかなり新しく/私の課題の1つで、あなたが退役軍人や天才が私を正しい方向に助けてくれるならば、私はそれを感謝します。オペレータオーバーロード - 'operator!='と一致しません(オペランドタイプは

私のクラス機能、具体的にはオペレータの過負荷のインパネレーションに問題があるようです。 次は私のヘッダファイルです:

#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; 
} 

私はの全体の多くが続くエラーとしてこれを取得「ノート:」S

[email protected]:~/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’) 

は、私が過去2日間以来、答えを探しまわって私profesorsとインターネットの両方されていますまだ解決策を与えられていません。私は同じことをするためのさまざまな方法を試しましたが、私はこのエラーと同様に他のエラーも受け取ります。それは私が " - ="オーバーロードを削除すると、それは私にすべてのメモを与えるdoesnt、それは私に上記のエラーを与えるように思えます。

ありがとうございます。

(私はどのnetiqetteの誤りを犯したか、uがより多くの情報が必要な場合は、悪い言語なしprefferablyコメントしてください:)

+1

2つの 'Book'オブジェクトを比較する比較演算子がありますか? –

+0

また、なぜ 'Book'に*ポインタ*の配列がありますか?逆参照を開始する前に、配列ポイントのすべてのポインタをどこかに有効にしますか?あなたは配列のためにメモリを割り当てますか? –

+0

申し訳ありませんが、完全な.cppファイルを投稿すると意味が分かります。 – Rishi

答えて

1

ではので、もしこれが全体のルーチンを「ブログ」に新たなんだ - 、=演算子のオーバーロードの実装あなたは2つの本があるかどうか比較する!=。コンパイラはこれの実装を見つけることができないようですので、Book =!または==オーバーロードを記述していないと仮定しています。

関連する問題