我让这个程序在一个主文件中完美运行。
但我需要将它分成头文件和源文件。
我现在遇到了大量错误,我对这里缺少的东西感到茫然。
使用同学头文件和源文件测试了主要内容,它有效。所以问题出在头文件或源文件中。
#ifndef JMTDRational
#define JMTDRational
#include <string>
#include <sstream>
class JMTDRational{
private:
int numerator;
int denominator;
public:
void set_numerator(int num);
void set_denominator(int den);
int get_numerator() const;
int get_denominator() const;
std::string r_to_string();
double r_to_decimal();
JMTDRational add(const JMTDRational & obj);
JMTDRational subtract(const JMTDRational & obj);
JMTDRational multiply(const JMTDRational & obj);
JMTDRational divide(const JMTDRational & obj);
JMTDRational();
JMTDRational(int num,int den);
JMTDRational reduce(const JMTDRational);
int gcd(int n, int d);
};
#endif // JMTDRational
#include "JMTDRational.h"
void JMTDRational::set_numerator(int num)
{
numerator = num;
}
void JMTDRational::set_denominator(int den)
{
if (den != 0) {
denominator = den;
}
else{
denominator = 1;
}
}
int JMTDRational::get_numerator() const
{
return numerator;
}
int JMTDRational::get_denominator() const
{
return denominator;
}
string JMTDRational::r_to_string()
{
ostringstream str1, str2;
str1 << get_numerator();
str2 << get_denominator();
string temp = str1.str() + "/" + str2.str();
return temp;
}
double JMTDRational::r_to_decimal()
{
double temp = get_numerator() / get_denominator();
return temp;
}
JMTDRational::JMTDRational(int num,int den) {
numerator = num;
denominator = den;
}
JMTDRational::JMTDRational() {
numerator = 0;
denominator = 1;
}
JMTDRational JMTDRational::reduce(const JMTDRational)
{
int temp_numerator = get_numerator() / gcd(get_numerator(),get_denominator());
int temp_denominator = get_denominator() / gcd(get_numerator(),get_denominator());
JMTDRational temp(temp_numerator,temp_denominator);
return temp;
}
int JMTDRational::gcd(int n, int d)
{
if (d == 0)
return n;
return gcd(d, n % d);
}
JMTDRational JMTDRational::add(const JMTDRational & obj)
{
int temp_numerator = get_numerator() * obj.get_denominator() + obj.get_numerator() * get_denominator();
int temp_denominator = get_denominator() * obj.get_numerator();
JMTDRational temp(temp_numerator,temp_denominator);
return temp;
}
JMTDRational JMTDRational::subtract(const JMTDRational & obj)
{
int temp_numerator = get_numerator() * obj.get_denominator() - obj.get_numerator() * get_denominator();
int temp_denominator = get_denominator() * obj.get_numerator();
JMTDRational temp(temp_numerator,temp_denominator);
return temp;
}
JMTDRational JMTDRational::multiply(const JMTDRational & obj)
{
int temp_numerator = get_numerator() * obj.get_numerator();
int temp_denominator = get_denominator() * obj.get_denominator();
JMTDRational temp(temp_numerator,temp_denominator);
return temp;
}
JMTDRational JMTDRational::divide(const JMTDRational & obj)
{
int temp_numerator = get_numerator() * obj.get_denominator();
int temp_denominator = get_denominator() * obj.get_numerator();
JMTDRational temp(temp_numerator,temp_denominator);
return temp;
}
最佳答案
在头文件中,您已定义
名称:JMTDRational
为空值。
#ifndef JMTDRational
#define JMTDRational
#include <string>
#include <sstream>
class JMTDRational{
因此,在代码中凡是名称为 JMTDRational
的地方,预处理器都会将其替换为“nothing”。
例如:
JMTDRational add(const JMTDRational & obj);
JMTDRational subtract(const JMTDRational & obj);
变成:
add(const& obj);
subtract(const & obj);
这是无效代码。
您需要在 header 防护中使用唯一的强化名称:
#define JMTDRATIONAL_H_HEADER
关于c++ - 将主文件拆分为 header 、源文件和主文件后出现多个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160812/