gpt4 book ai didi

c++ - 流的重载产生两种不同的结果

转载 作者:行者123 更新时间:2023-11-28 07:27:58 27 4
gpt4 key购买 nike

我在一个特定文件 cfileop.cpp 中重载了 ofstream 运算符,如下所示:

std::ostream& operator<<(std::ostream& ofs, LPCWSTR wideString)
{
//ofs << ConvertUnicodeToUtf8(wideString).GetBuffer();
ofs << CW2A(wideString,CP_UTF8);
return ofs;
}

在这个特定的文件中,使用运算符(operator)进行的任何调用都是完美的。我完全没有问题。

但是,我需要在另一个文件中重载这个相同的运算符。当我在另一个位置 acrazyapp.cpp 重复这个调用时,我得到类似这样的输出:

02962AE010021A3402961018
029621C010021A3410022AF0
029621C010021A34029619D0
029621C010021A3410022A68

我认为,只需将重载位置切换到 acrazyapp.cpp 即可解决这个问题。然而,这导致 cfileop.cpp 无法正确输出。为了同时满足这两者,我将调用移至头文件 ch_ofstream.h,并将其包含在两个 cpp 文件中。但是,在这种情况下,我收到此错误: fatal error LNK1169:找到一个或多个多重定义的符号。

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

谢谢!

最佳答案

因为在那个文件中没有声明重载,你最终调用了operator<<(void*) , 它打印指针指向的地址。

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

关于c++ - 流的重载产生两种不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18369828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com