重载运算符 << - 必须是二元运算符
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的成员函数。
这里有什么错误?我回顾了之前的问答,但所有这些编码人员在重载 << 时似乎都犯了其他错误。当我尝试时,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的成员函数。