0

我在一个特定的文件 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:找到一个或多个多重定义的符号。

如何确保上面的 ofstream 运算符在两个 cpp 文件中正确重载而不合并 cpp 文件?

谢谢!

4

1 回答 1

1

由于未在该其他文件中声明重载,因此您最终会调用operator<<(void*),它会打印指针指向的地址。

与任何其他函数一样,您应该在一个头文件中声明它,并在一个源文件中实现。

于 2013-08-22T00:47:19.523 回答