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>