错误:不匹配'运算符>>' (操作数类型是' std :: istream

时间:2017-07-13 04:03:19

标签: c++ c++11

我正在阅读c ++入门第5版。我有一个简单的Sales_item类。这是main.cpp文件。

#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')

1 个答案:

答案 0 :(得分:2)

为空std::cin执行class没有任何意义。如果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;
}

希望这有帮助。