操作符重载:得到无法识别的错误

operator overloading : getting unidentifiable errors

本文关键字:识别 错误 重载 操作符      更新时间:2023-10-16
#include <iostream>
using namespace std;
class sales_item  
{  
    friend ostream& operator<<(ostream&,const sales_item&);
public:
    int item;
    sales_item()
    {
        item=2;
    }
    sales_item operator+(sales_item& item1)
    {
        sales_item item2;
        item2.item = item1.item+item;
        return item2;
    }
};

ostream& operator<<(ostream &out, sales_item& item3)  
{
    out<<item3.item;
    return out;
}
int main(int argc, const char * argv[])  
{  
    sales_item item1,item2;
    sales_item item3=(item1+item2);
    cout<<item3;
    return 0;
}
在这个程序中,我重载了+和<<操作符。但是当我试图替换这一行时,count <<item3;<<(item1 +第二条);或者计算<< item1 +第二条;

我得到以下错误:

Undefined symbols for architecture x86_64:
  "operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, sales_item const&)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是怎么发生的?

你实现了

ostream& operator<<(ostream &out, sales_item& item3)  

friend ostream& operator<<(ostream&,const sales_item&);
//                                    ^
//                        const is missing in definition

嘿,错误是因为我在函数中引用了sales项ostream&(ostream &out,sales_item &item3);当我把&它开始工作得很好…由于