当前位置: 首页 > 知识库问答 >
问题:

如何使用模板对常量使用运算符重载

胡景焕
2023-03-14

我正试图使<<<;运算符仅用于理解目的。我是成功的,但我遇到了常量数据类型和对象的问题。编译器给出了以下信息:

使用重载运算符“<<>”不明确(操作数类型为“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;
}

共有1个答案

郑卜鹰
2023-03-14

正如上面的注释所提到的,您不能重载用于流输出的主类型。它已经在标准库中定义。因此,为了打印您的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'。开心点。

 类似资料:
  • 我有一个模板类包含其他类的优先级队列,我需要使用优先级重载器调用各个类重载器,根据各个类的偏好进行比较(在这种情况下是年龄,在另一个类中可能是价格。 我绝对相信我已经实现了不正确的运算符重载,因此非常感谢您的建议。 举个例子 我得到这个错误,我不知道我需要做什么来修复它。我必须将类重载保持为单个变量(Animal) 任务cpp:在“布尔运算符”的实例化中

  • 我已经尝试了所有的方法,如果你不选择“ST”,它会不断地在while循环中循环。我不知道该怎么办,如果有人能告诉我,那将非常有帮助。我在顶部添加了一些上下文代码;我只需要while循环的帮助。我正在使用循环,因此如果他们没有选择给定的位置,他们必须重新选择。 这是我的密码:

  • 使用,我在基本模板中定义了一个,其中包含默认内容。在某些情况下,我希望这个块为空,所以我想我可以重新定义它的名称,并使它不包含以下内容: 不知何故,Go似乎认为这个定义是“零”,并且仍然会呈现默认内容,除非我将任何非空白内容放入定义中。 我在Golang repo上发现了这个问题,它在一个游乐场示例中很好地描述了同样的事情: 奇怪的是,这个问题提到它是固定的(如果我理解正确的话,它在1.8.1中着

  • 我对这个错误有意见 错误LNK2019未解析的外部符号"类std::basic_ostream 现在,< code>post所做的就是调用< code >操作符 宣言 定义 它们分别位于文件和中,我要求运算符不是成员函数(用于赋值)。

  • 我在运算符过载时遇到问题 主要是我有 其中<code>Integer</code>只是<code>int</code>的包装,带有我需要的一些特殊功能。 然而,当我编译上面的代码时,我得到了错误C2679,它表示<code>binary' 我还试图删除友元声明中的参数,因此代码变成了: 但这会产生另一个错误:C2785:

  • 问题内容: 为什么当我在做时它起作用,但是当我在做时: 它不起作用? 为什么,以及如何解决? 完整代码: 但是这段代码可以正常工作: JSFiddle:https ://jsfiddle.net/69z2wepo/55100/ 问题答案: 这样一来,您就可以改变状态,因为它和做是同一件事。您永远不要改变状态(请参阅https://facebook.github.io/react/docs/comp

  • 以下代码返回此错误: 主要的cpp | 80 |错误:将“const matrix”作为“T”的“this”参数传递 有什么想法为什么以及如何修复它吗? http://ideone.com/5OigTP

  • 我正在用Freemarker模板编写应用程序。我通过Java类获得了如何配置和运行. ftl模板机制的知识,并使控制台或文件输出在上面打印模板结果。 但是如何在servlet上实现呢?它是如何工作的?我想跑。类似Tomcat的ftl文件。jsp文件。但它只给我一个错误(“说明请求的资源不可用”)。 有人能给我解释一下怎么跑吗。servlet上的ftl文件? 这是我的web.xml: 这是我的Jav