这些类型有什么问题?

What is wrong with these types?

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;
}

然后你可以"naturally"调用它

std::cout << myobject;

翻译为

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

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


无关:

MyType myobject = MyType(); 是冗余且低效的,因为您是从临时的 MyType() 复制构造左侧,而临时 MyType() 也必须构造(尽管编译器通常通过复制省略对其进行优化)。只写 MyType myobject.

就足够了,而且效率更高