是否可以覆盖头文件中结构的 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.
的任何翻译单元中定义
我正在尝试通过重写运算符<< 打印出结构中的字段。如果我将覆盖放在 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.
的任何翻译单元中定义