0
#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;
}

在这个程序中,我重载了 + 和 << 运算符。但是当我试图替换行 cout << item3 ; 与 cout << (item1+item2) ; 或 cout << item1+item2 ;

我收到以下错误:

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)

情况如何?

4

2 回答 2

6

你实施了

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

对比

friend ostream& operator<<(ostream&,const sales_item&);
//                                    ^
//                        const is missing in definition
于 2013-01-07T11:31:52.277 回答
0

嘿,错误是因为我在函数 ostream& operator<<(ostream &out,sales_item &item3); 中引用了销售项目;当我删除&它开始工作正常..谢谢

于 2013-01-07T11:46:51.867 回答