我已经建立了一个理性的类,这是我的.h文件:
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
using std::istream;
using std::ostream;
class Rational
{
public:
Rational();
Rational(int n);
Rational(int n, int d);
Rational(const Rational& other);
~Rational();
Rational operator+(const Rational& other);
Rational operator-(const Rational& other);
Rational operator*(const Rational& other);
Rational operator/(const Rational& other);
Rational operator+(int n);
Rational operator-(int n);
Rational operator*(int n);
Rational operator/(int n);
Rational& operator=(const Rational& other);
bool operator==(const Rational& other);
bool operator!=(const Rational& other);
bool operator>=(const Rational& other);
bool operator<=(const Rational& other);
bool operator<(const Rational& other);
bool operator>(const Rational& other);
bool operator==(int n);
bool operator!=(int n);
bool operator>=(int n);
bool operator<=(int n);
bool operator<(int n);
bool operator>(int n);
friend istream& operator>>(istream& is, Rational &r);
friend ostream& operator<<(ostream& is, Rational &r);
private:
int
num,
den;
};
#endif // RATIONAL_H
我遇到了多个错误,主要是:
include \ Rational.h | 8 |错误:ISO C ++禁止声明&#39; RATION&#39; 没有类型[-fpermissive] |
include \ Rational.h | 41 |错误:&#39; istream&#39;没有命名类型|
include \ Rational.h | 42 |错误:&#39; ostream&#39;没有命名类型|
以及我主文件中的其余部分(这些都是因为我尝试使用&gt;&gt;和&lt;&lt;)。我现在已经搜索了几个小时,发现了类似的问题,尝试了多种解决方案,我不想在黑暗中拍摄,我想知道问题是什么以及为什么。这里的记录是我在实现文件中对Rations的所有内容:
Rational::Rations(int n)
{
num = n;
den = 1;
}
如果我需要完整的cpp实现文件或main来解决这个问题,请告诉我。另外,我使用的是codeblocks,我在构建选项中添加了include到我的编译器中。
答案 0 :(得分:0)
构造函数与类具有相同的名称,并且没有返回类型。
您的函数Rations
拼写不同,要么返回类型为void
(不返回值),要么返回值。
答案 1 :(得分:0)
您似乎打算Rations(int)
应该是您的类的构造函数,但构造函数的名称必须与类的名称相同:
Rational::Rational(int n)
如果不是拼写错误,那么我不知道您为何将Rational
更改为Rations
。
对于istream
和ostream
,您的班级会引用它们,但您尚未宣布它们 - 编译器不知道您在谈论什么。您必须在头文件中包含正确的标题(上面类定义):
#include <istream>
using std::istream;
using std::ostream;
或者,如果您对此非常严格,请在类定义之上使用前向声明:
class istream;
class ostream;
然后将#include
指令放在源代码中,位于函数定义之上。