2015-09-27 2 views
0

Хорошо, у меня есть конструктор, называемый фракциями, который принимает в качестве параметров два целых числа, тогда я должен иметь метод с именем add(), который должен быть const int, который принимает как параметры конструкторских фракций, а затем возвращает Фракции.Вызов конструктора в методе int C++

Однако я продолжаю получать сообщение об ошибке: «Нет подходящую функцию преобразования из„фракции“до„сопзИте Int“существует»

обыскивал Google в течение последних нескольких часов, но я не могу найти что-либо касающееся того, как обойти это. Любая помощь по этому поводу будет оценена, спасибо!

#include <iostream> 
#include <conio.h> 
#include <sstream> 
#include "homework3.h" 

using namespace std; 



//Provide all missing parts for the class declarations 
class Fraction { 
public: 
    Fraction(){ 

    } 
    Fraction(const int numerator, const int denominator) { 
     Fraction::numerator = numerator; 
     Fraction::denominator = denominator; 
    } 
    const int add(Fraction &f1) { 

     return f1; 

    } 
    string getString(); 

private: 
    int numerator = 0; 
    int denominator = 0; 

}; 

string Fraction::getString() { 
    //Returns a string of the fraction. 
    stringstream ss; 
    ss << numerator << "/" << denominator; 
    return ss.str(); 
} 


int main() { 

    //Test book problems 
    Fraction f1(3, 5); 
    Fraction f2(7, 8); 

    Fraction f3 = f1.add(f2); 
    Fraction f4 = f1.add(4); 
    Fraction f5 = f1 + f2; 
    cout << f3.getString() << endl; //These should display 59/40 
    cout << f4.getString() << endl; //These should display 23/5 
    cout << f5.getString() << endl; //These should display 59/40 

    f3 = f1.subtract(f2); 
    f4 = f1.subtract(4); 
    f5 = f1 - f2; 
    cout << f3.getString() << endl; //These should display -11/40 
    cout << f4.getString() << endl; //These should display -17/5 
    cout << f5.getString() << endl; //These should display -11/40 


    f3 = f1.multiply(f2); 
    f4 = f1.multiply(4); 
    f5 = f1 * f2; 
    cout << f3.getString() << endl; //These should display 21/40 
    cout << f4.getString() << endl; //These should display 12/5 
    cout << f5.getString() << endl; //These should display 21/40 

    f3 = f1.divide(f2); 
    f4 = f1.divide(4); 
    f5 = f1/f2; 
    cout << f3.getString() << endl; //These should display 24/35 
    cout << f4.getString() << endl; //These should display 3/20 
    cout << f5.getString() << endl; //These should display 24/35 

            //Now for some fun... 
    f5 = (f1 * f2)/(f3 - f4) + (f5 + f2); 
    cout << f5.getString() << endl; //These should display 10671000/4200000 

    cout << "Press any key to continue" << endl; 
    getch(); 

    return 0; 
} 
+2

Кажется, что есть какая-то путаница. Ваша функция add() принимает Fraction и возвращает int, но вы пытаетесь вернуть из нее объект Fraction. Не уверен, что вы действительно хотите сделать. – SergeyA

+1

Не является ли возвращаемое значение f1 a Fraction? – Trevor

+0

Не с подписью, которую вы дали. 'const int' - это возвращаемое значение. Это не имеет смысла. Также ваша добавленная реализация ничего не добавляет. – drescherjm

ответ

3

Вы называете

Fraction f4 = f1.add(4); 

Но у вас нет каких-либо add метод, который принимает const int в качестве аргумента и возвращает Fraction. Вы должны просто реализовать такой метод.

Также метод add, который вы опубликовали, возвращает Fraction, а не int, как указано в заголовке. Если вы хотите, чтобы он возвращал int, вы можете просто делить числитель на знаменатель. Однако обратите внимание, что если у вас есть, например, 1/2, результат будет равен 0. Если это не то, что вы намереваетесь, подумайте об использовании float или double вместо int.

+0

Я вытащил много кодирования, чтобы сделать пост менее неуклюжим, но у меня его есть. Тем не менее, он все равно дает мне то же сообщение об ошибке. – Trevor

+0

Итак, в какой строке вы получаете это сообщение об ошибке? – Estiny

+0

const int add (Fraction & f1) { return f1; } – Trevor

0

Этот метод вызывает ошибку:

const int add(Fraction &f1) 
{ 
    return f1; 
} 

Тип параметра Фракцию передается по ссылке, и вы возвращает константный Int.

0

Метод Аdd должен возвращать номер int. Попробуйте переопределить оператор-оператор.

Смежные вопросы