我正试图使<<<;运算符仅用于理解目的。我是成功的,但我遇到了常量数据类型和对象的问题。编译器给出了以下信息:
使用重载运算符“<<>”不明确(操作数类型为“std::__1::Ostream”(又名“basic_Ostream”)和“const char”)
我在MAC和C++17上使用Clion和gcc。有人能帮我理解一下上面的错误意味着什么,以及如何修复它吗?代码在下面。谢啦!
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;
}
这段代码将打印您的字符串'I am very happy'。开心点。