是否可以覆盖c ++运算符<<对于头文件中的结构?

时间:2015-04-10 17:07:59

标签: c++ header ostream

我试图通过重写运算符<<来打印结构中的字段。如果我将覆盖放在一个cpp文件中,这可以正常工作,但是我希望将它放在我的头文件中。

然而,当我这样做时,我收到错误:

  multiple definition of `operator<<(std::basic_ostream<char, std::char_traits<char> >&, test)' 

是否可以在头文件中使用?

test.h
#ifndef TEST_H
#define TEST_H
struct test{
    int a;
    int b;
    int c;
};


  std::ostream& operator<< (std::ostream& o, const test& t){
       o <<"{ " << t.a << " }" << endl;
       return o;
  }

#endif

1 个答案:

答案 0 :(得分:6)

与任何函数一样,如果您在标题中定义它,请将其设为内联:

inline std::ostream& operator<< (std::ostream& o, const test& t)
^^^^^^

这放松了One Definition Rule,允许在包含标题的任何翻译单元中定义。