构造函数中>>运算符报错

学习类的构造函数时出现的问题:用输入流初始化类对象时>>运算符报错
#include
#include
using namespace std;
#ifndef ALL
#define ALL
#define _CRT_SECURE_NO_WARNINGS 1
struct sales_data {
    //类数据成员
string bookno; unsigned units_sold = 0; double sellingprice = 0; double saleprice = 0; double discount = 0;
//类构造函数,有四个
    sales_data() = default;  sales_data(const string& book) :bookno(book) {}
    sales_data(const string& book, const unsigned num, const double sellp, const double salep);
    sales_data(istream& is){
        is >> *this;//此处会报错    }
}; 
#endif
C++ 没有与这些操作数匹配的 运算符 操作数类型为: std::istream >> sales_data
已包含头文件string
这是什么原因呢,怎么解决,求帮助

你得先自问一下,*this是什麽东西呢???
是sales_data类对象,但std::istream>>怎么可能认识这个雷对象呢?
你得给类鞥家>>操作符重载函数才行,这个重载函数会告诉std::istream怎么样输出saies_data类对象
或者你这里不要>> * this,而是逐个数出类成员变量,比如>>bookno>>units_sold这样子。但在构造函数里输出毫无意义,这些成员变量还没有赋值呢,输出它干啥呢?