我试图通过重写运算符<<来打印结构中的字段。如果我将覆盖放在一个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
答案 0 :(得分:6)
与任何函数一样,如果您在标题中定义它,请将其设为内联:
inline std::ostream& operator<< (std::ostream& o, const test& t)
^^^^^^
这放松了One Definition Rule,允许在包含标题的任何翻译单元中定义。