是否可以覆盖头文件中结构的 c++ operator<<?

is it possible to override the c++ operator<< for a struct in a header file?

我正在尝试通过重写运算符<< 打印出结构中的字段。如果我将覆盖放在 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

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

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

这放宽了单一定义规则,允许在包含 header.

的任何翻译单元中定义