关于运算符<声明为类的友元函数,报错的问题,(急。。。)
归零起步 2018-08-31 09:54:43 // sales.h
#ifndef SALES_H
#define SALES_H
#include <string>
#include <istream>
#include <ostream>
class Sales
{
friend std::istream& operator>>(std::istream& is, Sales &sal);
friend std::ostream& operator<<(std::ostream& os, const Sales &sal);
friend bool operator<(const Sales &lsal, const Sales &rsal);
friend bool operator==(const Sales &lsal, const Sales &rsal);
friend bool operator!=(const Sales &lsal, const Sales &rsal);
int compare2(const Sales &lsal, const Sales &rsal);
public:
Sales() = default;
Sales(std::string name) : bkName(name) {}
Sales(std::istream is) { is >> *this; }
public:
Sales& operator+=(const Sales& sal);
std::string isbn() const { return bkName; }
double avg() const;
private:
std::string bkName;
size_t bkCount = 0;
double bkRevenue = 0.0;
};
#endif // SALES_H
//sales.cpp
#include "sales.h"
#include <istream>
#include <ostream>
#include <string>
std::istream& operator>>(std::istream& is, Sales &sal)
{
double price = 0;
is >> sal.bkName >> sal.bkCount >> price;
if (is)
{
sal.bkRevenue = sal.bkCount * price;
}
else
{
sal = Sales();
}
return is;
}
std::ostream& operator<<(std::ostream& os, const Sales &sal)
{
os << sal.bkName << sal.bkCount << sal.bkRevenue;
os << '\n';
return os;
}
bool operator<(const Sales &lsal, const Sales &rsal)
{
return compare2(lsal, rsal) == 1? true : false;
}
bool operator==(const Sales &lsal, const Sales &rsal)
{
return ((lsal.isbn() == rsal.isbn()) && (lsal.bkCount == rsal.bkCount) && (lsal.bkRevenue == rsal.bkRevenue));
}
bool operator!=(const Sales &lsal, const Sales &rsal)
{
return !(lsal == rsal);
}
int Sales::compare2(const Sales &lsal, const Sales &rsal)
{
if ( lsal.isbn() > rsal.isbn() )
{
return 1;
}
else if ( lsal.isbn() == rsal.isbn() )
{
return 0;
}
else
{
return -1;
}
}
Sales& Sales::operator+=(const Sales &sal)
{
this->bkCount += sal.bkCount;
this->bkRevenue += sal.bkRevenue;
return *this;
}
double Sales::avg() const
{
if ( bkCount != 0 )
{
return this->bkRevenue / this->bkCount;
}
else
{
return 0;
}
}
问题: 编译时报错 error: ‘compare2’ was not declared in this scope 为什么报错?