所以基本上我正在尝试做一个分数类。它将从用户输入中获取分数并执行添加。例如,我输入1 5和1 7,添加它将打印出12/35 这是我的 .h 类:
#include <string>
#ifndef _FRACTION_H_
#define _FRACTION_H_
using namespace std;
class Fraction
{
public:
Fraction();
Fraction(int n, int d);
int getNumerator() const;
int getDenominator() const;
void display();
string to_string();
Fraction operator+(Fraction &second);
private:
int numerator;
int denominator;
};
这是我的 .cpp 文件:
#include "Fraction.h"
#include <string>
include <iostream>
using namespace std;
Fraction::Fraction(){}
Fraction::Fraction(int n, int d)
{
this->numerator = n;
this->denominator = d;
}
int Fraction::getNumerator() const
{
return numerator;
}
int Fraction::getDenominator() const
{
return denominator;
}
Fraction Fraction::operator+(Fraction &second)
{
int n1 = getNumerator() * second.getDenominator();
int n2 = second.getNumerator() * getDenominator();
int d = getDenominator() * second.getDenominator();
return Fraction(n1+n2, d);
}
string Fraction::to_string()
{
return (getNumerator() + "/" + getDenominator()) ;
}
这是我的主要方法:
bool get_input(Fraction &fract);
int main()
{
Fraction fraction1, fraction2;
if (((!get_input(fraction1)) || (!get_input(fraction2))))
cout << "Invalid Input!" << endl;
else
{
// Test harness for Arithmetic Operator Overloading
Fraction result = fraction1 + fraction2;
cout << "Addition = " << result.to_string() << endl;
}
bool get_input(Fraction& fract)
{
int num, den;
cout << "Enter numerator & denominator (separated by space)" << endl;
cin >> num >> den;
if (cin.fail())
return false;
Fraction f(num,den);
fract = f;
return true;
}
}
它设法接受用户输入。但是,它不会打印出结果。提前谢谢。
答案 0 :(得分:5)
可能存在其他问题,但Fraction::to_string()
函数显然是错误的:return
表达式中的类型
是int
,char const*
和int
。添加这些的结果
是char const*
,但只是字符串文字
两个字符长,如果两个int
的总和大于
二,你有未定义的行为。您需要转换int
先串起来;最简单的方法是使用
std::ostringstream
:
std::string
Fraction::to_string()
{
std::ostringstream results;
results << numerator << '/' << denominator;
return results.str();
}
通常,当您滥用时,会发生编译器错误
像这样的类型,但由于历史原因:字符串文字
类型char const[]
,而不是std::string
; char const[]
几乎到处转换为char const*
; C ++支持
向指针添加整数值;和std :: string有
一个构造函数,它从char
const*
执行隐式转换。
答案 1 :(得分:1)
您在"/"
方法中的文字(int
)和to_string
之间使用“+”运算符
编译器正在尝试进行一些隐式转换,它以point
(int + int + char *,最佳猜测是char *)结束,然后使用正确的构造函数将其转换为std :: string
更改您的方法以使用stringstream
(并且您可以更好地控制格式化):
string Fraction::to_string()
{
std::stringstream s;
s << getNumerator() << "/" << getDenominator();
return s.str();
}