2015-02-17 3 views
0

Прежде всего, я хотел бы извиниться за мой плохой английский и заранее поблагодарить вас за чтение и помощь.Передача данных структуры переменной C++?

В принципе у меня есть два структур, которые держат 3 Интса: номера fractionAnswers

Я тогда есть класс с именем addSubFractions, которая принимает два числа типа структуры в качестве параметров и возвращает тип fractionAnswers структуры. Моя цель - присвоить доход от addSubFractions класс номера тип struct variable под названием ответы.

Я довольно новичок в C++, и я думал, что смогу сделать это логически, я мог бы как можно глубже, без какой-либо хорошей информации.

Heres часть кода, который не работает для меня:

int main() { 
numbers first, second, answer ; 

cout << "Enter fraction" ; 
cin >> first.wholeNumber ; 
cin >> first.numerator ; 
cin >> first.denominator ; 
cout << "Enter second fraction" ; 
cin >> second.wholeNumber ; 
cin >> second.numerator ; 
cin >> second.denominator ; 


answer = addSubFractions(first, second) ; 

cout << "Your answer is:" << answer.numerator << "/" << answer.denominator ; 

return 0 ;} 

Вот другой класс я говорил о

fractionAnswers addSubFractions(numbers firstFraction, numbers secondFraction) { 
    numbers answerFraction, holdFraction1, holdFraction2  ; 
    fractionAnswers someAnswers    ; 

    //Multiply to get same denominator 
    holdFraction1.denominator = firstFraction.denominator * secondFraction.denominator ; 
    holdFraction2.denominator = firstFraction.denominator * secondFraction.denominator ; 

    //Numerator multiplication to match new denominator 
    holdFraction1.numerator  = firstFraction.numerator  * secondFraction.denominator ; 
    holdFraction2.numerator  = secondFraction.numerator * firstFraction.denominator ; 


    //Reduce fractions first 
    while (true) { 
     if(!reduceFractions(holdFraction1)) 
      break; 
    } 

    //Reduce fractions second 
     while (true) { 
      if(!reduceFractions(holdFraction2)) 
       break; 
     } 

     someAnswers.numeratorAns  = holdFraction1.numerator + holdFraction2.numerator ; 
     someAnswers.denominatorAns = holdFraction2.denominator     ; 
return someAnswers ; 
} 

это reduceFractions

bool reduceFractions(numbers Fractions) { 
    bool answer ; 

    for (int i = Fractions.numerator ; i >= 2 ; i--) {  //This will keep running until i = the GFC for both numerator & denominator 
     if ((((Fractions.numerator % i) == 0) && (Fractions.denominator % i) == 0)) { 

      Fractions.numerator  /= i ; 
      Fractions.denominator /= i ; 
      answer     = true ; 
     } 
    } 

    answer = false ; 
    return answer ; 

} 

Это структуры

struct numbers { 
    int numerator ; 
    int denominator ; 
    int wholeNumber ; 
}; 

struct fractionAnswers { 
    int numeratorAns ; 
    int denominatorAns ; 
    int wholeNumberAns ; 
}; 
+0

Вы возвращающее значение типа 'fractionAnswers' от вашей функции и пытаетесь присвоить его значение типа' 'numbers' в основном()'. Вероятно, это не то, что вы намеревались сделать. – dhavenith

+1

Каково определение 'reduceFractions'? Кроме того, может возникнуть смысл называть его «someAnswers» после того, как вы заполнили его значениями, а 'someAnswers', вероятно, должен быть« числом », а не его собственным типом (и функция должна вернуть соответствующий тип). – IllusiveBrian

+0

вы также можете просто 'while (reduceFactions (....)) {}', не нужно внутреннее 'if' +' break'. – aruisdante

ответ

0

Этот код не должен компилироваться, это правильно? Вы не можете присвоить значение типа fractionAnswers переменной типа numbers, хотя они имеют одинаковое расположение элементов. Некоторые опции:

  • Изменить тип возвращаемого addSubFractions к numbers.

  • Изменения answer = addSubFractions(first, second) ; в fractionAnswers temp = addSubFractions(first, second); answer.numerator = temp.numeratorAns; answer.denominator = temp.denominatorAns; answer.wholeNumber = temp.wholeNumberAns;

+1

Есть гораздо больше проблем, чем просто тип возврата в коде. – aruisdante

+0

Спасибо, это исправлено. Я думал, что, поскольку у них одинаковые элементы макета, все будет в порядке. Он работает сейчас! И спасибо @aruisdante за эту ссылку и за то, что сообщили мне об операторе &. –