我正试图重载<lt;操作员只是为了理解目的。我很成功,但我在const数据类型和对象方面遇到了问题。编译器给了我以下内容:
使用重载运算符'<lt;'不明确(操作数类型为"std::__1::ostream"(也称为"basic_stream"(和"const-char"(
我在MAC和c++17上使用带有gcc的Clion。有人能帮我理解上面的错误意味着什么以及如何修复它吗?代码如下。谢谢
template <typename T>
std::ostream& operator<<(std::ostream& ost, const T data) {
printf("I am very happy");
return ost;
}
int main() {
const char s = 10;
std::cout << s << std::endl;
}
正如上面的注释所提到的,您不能重载流输出的主要类型。它已在标准库中定义。因此,为了打印您的overlaod,您必须发明一些不属于主要类型的用户类型,并流式输出用户类型。这将直接导致你的超负荷。
#include <iostream>
template <typename T>
std::ostream& operator<<(std::ostream& ost, const T data) {
printf("I am very happy");
return ost;
}
int main() {
struct mytype{ };
mytype s;
std::cout << s << std::endl;
}
此代码将打印您的字符串"我很高兴"。要快乐。