gpt4 book ai didi

c++ - 这些类型有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:45 25 4
gpt4 key购买 nike

main.cpp :

#include <iostream>
#include "MyType.h"

int main(int argc, const char * argv[]) {
MyType myobject = MyType();
std::cout << myobject; //error here
return 0;
}

MyType.h :

#include <ostream>

class MyType {
public:
MyType();
std::ostream& operator<<(std::ostream &os);
};

MyType.cpp :

#include "MyType.h"
#include <iostream>

MyType::MyType() {
}

std::ostream& MyType::operator<<(std::ostream &os){
return os;
}

我正在尝试为自定义类型重载 <<。当我这样做时,我收到此错误:/main.cpp:14:15: Invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and 'MyType')

我在这里做错了什么?

最佳答案

你声明operator<<作为成员函数。所以它只有在调用对象位于其左侧时才有效,如

MyType m;
m << (std::cout);

这看起来像个怪物。

最好是声明为好友,

friend std::ostream& operator<<(std::ostream &os, const MyType& rhs)
{
os << ...; // do something with rhs here
return os;
}

然后你可以“自然地”调用它

std::cout << myobject;

翻译成

operator<<(std::cout, myobject);

StackOverflow 有一个关于 Operator overloading 的非常好的指南您可以在其中找到有关运算符重载最佳实践的更多详细信息。


不相关:

MyType myobject = MyType();是多余且低效的,因为您正在从临时 MyType() 复制构造左侧也必须构造(尽管编译器通常通过复制省略来优化它)。只写MyType myobject就够了,效率更高.

关于c++ - 这些类型有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121618/

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