代码如下:
#ifndef SALES_DATA_H
#define SALES_DATA_H
class Sales_data
{
private:
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
public:
Sales_data() = default;
Sales_data(std::string book, unsigned s, double r) :bookNo(book), units_sold(s), revenue(r) {}
std::string isbn() const { return bookNo; }
std::istream &read(std::istream &is, Sales_data &item);
std::ostream &print(std::ostream &os, Sales_data &item);
Sales_data &combine(Sales_data &item);
};
std::istream &Sales_data::read(std::istream &is, Sales_data &item)
{
double price = 0.0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = item.units_sold*price;
return is;
}
std::ostream &Sales_data::print(std::ostream &os, Sales_data &item)
{
os << item.bookNo << ' ' << item.units_sold << ' ' << item.revenue << '\n';
return os;
}
Sales_data &Sales_data::combine(Sales_data &item)
{
units_sold += item.units_sold;
revenue += item.revenue;
return *this;
}
#endif//SALE_DATA_H_INCLUDE
在devcpp上可以正常运行,但在vs2015上却出现如下报错:1.错误 C2679 二进制“<<”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换) 2.错误 C2678 二进制“>>”: 没有找到接受“std::istream”类型的左操作数的运算符(或没有可接受的转换)。
请问大神们这是编译器问题还是代码问题?如果是代码问题,请告诉我代码出错位置以及应如何改进,如果是编译器问题,请告诉我应该怎么设置编译器才能使代码正常通过,万分感谢!
#ifndef SALES_DATA_H
#define SALES_DATA_H
class Sales_data
{
private:
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
public:
Sales_data() = default;
Sales_data(std::string book, unsigned s, double r) :bookNo(book), units_sold(s), revenue(r) {}
std::string isbn() const { return bookNo; }
std::istream &read(std::istream &is, Sales_data &item);
std::ostream &print(std::ostream &os, Sales_data &item);
Sales_data &combine(Sales_data &item);
};
std::istream &Sales_data::read(std::istream &is, Sales_data &item)
{
double price = 0.0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = item.units_sold*price;
return is;
}
std::ostream &Sales_data::print(std::ostream &os, Sales_data &item)
{
os << item.bookNo << ' ' << item.units_sold << ' ' << item.revenue << '\n';
return os;
}
Sales_data &Sales_data::combine(Sales_data &item)
{
units_sold += item.units_sold;
revenue += item.revenue;
return *this;
}
#endif//SALE_DATA_H_INCLUDE
在devcpp上可以正常运行,但在vs2015上却出现如下报错:1.错误 C2679 二进制“<<”: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换) 2.错误 C2678 二进制“>>”: 没有找到接受“std::istream”类型的左操作数的运算符(或没有可接受的转换)。
请问大神们这是编译器问题还是代码问题?如果是代码问题,请告诉我代码出错位置以及应如何改进,如果是编译器问题,请告诉我应该怎么设置编译器才能使代码正常通过,万分感谢!