重载运算符 << - 必须是二元运算符

Overloading operator<< - must be a binary operator

这里有什么错误?我回顾了之前的问答,但所有这些编码人员在重载 << 时似乎都犯了其他错误。当我尝试时,QT Creator 给出了这个错误:overloaded 'operator<<' must be a binary operator (has 3 parameters),指的是 .h 文件中的行。

编辑以下代码...

domino.h:

#include <string>
#include <iostream>
class domino {

public:
    domino();
    domino(int leftDots, int rightDots);
    std::string toString() const;
    std::ostream& operator<<(std::ostream& os, const domino & dom);
private:
    int leftDots;                           /* Dots on left side */
    int rightDots;                          /* Dots on right side */
};
#endif

domino.cpp:

#include "domino.h"
#include <string>
domino::domino() {
    this->leftDots = 0;
    this->rightDots = 0;
}
domino::domino(int leftNum, int rightNum) {
    this->leftDots = leftNum;
    this->rightDots = rightNum;
}
std::string domino::toString() const {
    return "[ " + std::to_string(leftDots) + "|" + std::to_string(rightDots) + " ]";
}
std::ostream& operator<<(std::ostream& os, const domino & dom) {
    return os << dom.toString();
}

main.cpp:

#include "domino.h"
#include "domino.cpp"
#include <iostream>

int main() {
    domino dom;
    std::cout << dom << std::endl;
    for(int i = 0; i < 7; i++) {
        for(int j = i; j < 7; j++) {
            domino newDom(i,j);
            std::cout << newDom << std::endl;
        }
    }
    return 0;
}

运算符应声明为 class

的友元函数
friend std::ostream& operator<<(std::ostream& os, const domino & dom);

或者您应该从 class 定义中删除运算符声明。

否则编译器认为该运算符是class的成员函数。