重载<<运算符的问题

Tra*_*tto 2 c++ compiler-errors operator-overloading

我试图重载我的Currency类的<<运算符,但我得到此编译器错误: C2143: syntax error : missing ';' before '&'

在我的.h文件中,我有:

 friend ostream &operator << (ostream &, const Currency&);
Run Code Online (Sandbox Code Playgroud)

在我的Currency.cpp文件中,我有:

    ostream &operator << (ostream &stream, const Currency &obj){
      stream<<"$"<<obj.dollars<<"."<<obj.cents;
      return stream;
      }
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都运行良好,但是一旦我把它放进去,就会窒息:

我的.h文件顶部有以下内容:

    #ifndef CURRENCY_H
    #define CURRENCY_H

  #include<iostream>
  #include<string>
  #include<ostream>
  #include<sstream>

  class Currency; //forward delcaration

  //Function prototypes for overloaded stream operators
  ostream &operator << (ostream &, const Currency &);
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么.帮助会很棒.谢谢

iam*_*ind 9

ostream声明在namespace stdstd::之前,你缺少标识符:

std::ostream &operator << (std::ostream &, const Currency &);
Run Code Online (Sandbox Code Playgroud)

如果你想避免std::在头文件之后你可以把using namespace语句:

...
#include<ostream>
using namespace std;  // this is not desirable though in real world programming

ostream &operator << (ostream &, const Currency &);
Run Code Online (Sandbox Code Playgroud)

编辑: using namespace <>建议不要在文件顶部进行实际编程.我把这部分仅仅用于FYI.

  • @TravisPessetto我没有删除upvote因为他确实回答了你的问题.在头文件中使用`namespace std;`的缺点是该声明适用于包含头文件的每个文件.因此,包括它的所有翻译单元都将在全局命名空间中显示std命名空间的内容,并且由于std库定义了具有非常常用名称的函数(例如std :: find),因此引入名称冲突的可能性更大. (2认同)