C++ 不稳定的声明行为:Rational.h:25:错误:在‘之前需要构造函数、析构函数或类型转换&’;代币
因此,我在这个头文件中遇到了一些问题,导致流插入操作符重载。如果按原样使用代码,我会收到标题中的错误消息。但是当我把声明放在主文件中时,它工作得很好 理性的C++ 不稳定的声明行为:Rational.h:25:错误:在‘之前需要构造函数、析构函数或类型转换&’;代币,c++,C++,因此,我在这个头文件中遇到了一些问题,导致流插入操作符重载。如果按原样使用代码,我会收到标题中的错误消息。但是当我把声明放在主文件中时,它工作得很好 理性的 #ifndef RATIONAL_H #define RATIONAL_H using namespace std; class Rational{ private: int numerator; unsigned int denominator; bool isNegative; public: Rat
#ifndef RATIONAL_H
#define RATIONAL_H
using namespace std;
class Rational{
private:
int numerator;
unsigned int denominator;
bool isNegative;
public:
Rational();
Rational(int);
Rational(int, int);
bool operator==(const Rational&);
Rational& operator++(int); //Unused int
Rational operator-(const Rational&);
Rational operator+(const Rational&);
Rational operator*(const Rational&);
Rational operator/(const Rational&);
};
ostream& operator<<(ostream&, Rational&); //Erroneous code
#endif
\ifndef RATIONAL\u H
#定义有理数
使用名称空间std;
类理性{
私人:
整数分子;
无符号整数分母;
bool为阴性;
公众:
有理();
Rational(int);
有理(int,int);
布尔运算符==(常数有理&);
Rational&operator++(int);//未使用的int
有理算子-(constrational&);
有理运算符+(constrational&);
有理算子*(常数有理&);
有理算子/(常数有理&);
};
ostream&operator您需要在Rational.h
//Rational.h
#include <iostream>
#包括
当您将重载声明放入1.c
中时,iostream
包含在Rational.h
之前,因此编译器知道类型ostream
,并且没有错误
然而,Rational.h
不包括iostream
,因此在这种情况下,编译器不知道类型ostream
,因此也不知道错误。哦,这些诊断有多大帮助。
#include <iostream>
#include "Rational.h"
using namespace std;
int main(){
Rational test = Rational(2);
cout << test << endl;
}
#include <iostream>