2017-07-13 11 views
-3

私はC++プライマー第五edition.Iがむき出しの骨Sales_itemクラスを持っていると読んでいますが、これはmain.cppにファイルは」です(「>>演算子」の一致なしエラー:オペランドの型がのstd ::はistream

#include <iostream> 
#include "Sales_item.h" 

int main() { 
Sales_item book; 
std::cin >> book ; 
} 

Sales_item.h

#ifndef BOOKSTORE_SALES_ITEM_H 
#define BOOKSTORE_SALES_ITEM_H 
#include <iostream> 

class Sales_item { 

}; 


#endif //BOOKSTORE_SALES_ITEM_H 

Sales_item.cppは空です。私はC++プライマーブックを次のです。だから私はそれがこの時点では空のままにすることであると仮定しています。

私はこのエラーを取得し、ビルドに失敗します。

error: no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream<char>}' and 'Sales_item')

+0

私はあなたのクラスで演算子を実装していないと推測します。私が推測しなければならないのは、あなたがあなたのクラスを見せていないということです。 –

+0

'Sales_item'に' >> 'をオーバーロードする必要があります –

+0

https://stackoverflow.com/help/mcveを参照 – Destructor

答えて

2

それは空classためstd::cinを行うにはどんな意味がありません。 class自体が空の場合、なぜそれを行いますか?

しかし、私はあなたがこの

here

#include <iostream> 
#include <string> 
class Sales_item { 
    std::string m_item_name; 
    int m_itemno; 

    public: 
    friend std::istream& operator>>(std::istream& o,Sales_item& obj) { 
     o>>obj.m_item_name>>obj.m_itemno; 
     return o; 
    } 

    friend std::ostream& operator<<(std::ostream& o,const Sales_item& obj) { 
     o<<obj.m_item_name<<' '<<obj.m_itemno; 
     return o; 
    } 

}; 

int main() { 
    Sales_item s; 
    std::cin>>s; 
    std::cout<<s; 
} 

ライブデモを参照してください行う必要があると思いますが、この情報がお役に立てば幸いです。

+1

デモンストレーションの目的で、対称性のために 'display()'の代わりに 'operator <<'をオーバーロードすることができます。 –

+0

'' std :: istream&operator >>(std :: istream&o、Sales_item&obj) ''これはこのクラスのistreamコンストラクタの編集ですか?私は今は理解できません。それにもかかわらず使用することができます。 –

+0

@ el.pescado:良いコメントです。コードを更新しました – Destructor

関連する問題