我在一个特定文件cfileop.cpp中重载了ofstream运算符,如下:
std::ostream& operator<<(std::ostream& ofs, LPCWSTR wideString)
{
//ofs << ConvertUnicodeToUtf8(wideString).GetBuffer();
ofs << CW2A(wideString,CP_UTF8);
return ofs;
}
在此特定文件中,使用该运算符进行的任何调用都非常有效。我没有任何问题。
但是,我需要在另一个文件中重载此相同的运算符。当我在另一个地方acrazyapp.cpp重复这个调用时,我得到类似这样的输出:
02962AE010021A3402961018
029621C010021A3410022AF0
029621C010021A34029619D0
029621C010021A3410022A68
我认为,只需将过载位置切换到acrazyapp.cpp即可解决。但是,这导致cfileop.cpp无法正确输出。为了满足这两个要求,我将调用移动到头文件ch_ofstream.h,并将其包含在两个cpp文件中。但是,在这种情况下,我收到此错误:致命错误LNK1169:找到一个或多个多重定义的符号。
如何在不合并cpp文件的情况下确保上述ofstream运算符在两个cpp文件中都正确重载?
谢谢!
答案 0 :(得分:1)
由于未在其他文件中声明重载,因此最终调用operator<<(void*)
,它会打印指针指向的地址。
与任何其他函数一样,您应该在一个头文件中声明它,并在一个源文件中实现。