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

时间:2017-03-01 01:46:32

标签: c++ qt overloading

这里的错误是什么?我查看了之前的Q&amp; A,但所有这些编码器在重载时都显示出其他错误&lt;&lt;当我尝试时,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;
}

1 个答案:

答案 0 :(得分:5)

应该将运算符声明为类

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

或者你应该从类定义中删除操作符声明。

否则编译器会将运算符视为类的成员函数。