0

簡単なプログラムがあります。メインは私の教授によって提供されます。enter、、simplifyと呼ばれる3つの関数を記述しますdisplay

主要

#include <iostream>
using namespace std;
// #include "fraction.h"

struct Fraction {
    int numerator;
    int denominator;
};

void enter(struct Fraction* fraction);
void simplify(struct Fraction* fraction);
void display(struct Fraction fraction);

int main() 
{
    struct Fraction fraction;
    cout << "Fraction Simplifier" << endl;
    cout << "===================" << endl;
    enter(&fraction);
    //simplify(&fraction);
    //display(fraction);
}

void enter(struct Fraction* fraction) {
    cout << "Numerator:     " << endl;
    cin >> *fraction.numerator; // the line that doesn't work, line 31
}

void simplify(struct Fraction* fraction) {}
void display(struct Fraction fraction) {}

エラー:

w2.cpp:31:19: error: request for member ânumeratorâ in âfractionâ, which is of non-class type âFraction*â

問題の行

void enter(struct Fraction* fraction) {
    cout << "Numerator:     " << endl;
    cin >> *fraction.numerator; // the line that doesn't work, line 31
}
4

4 に答える 4

3

演算子の優先順位に問題があります。この表現

*fraction.numerator;

として解析されます

*(fraction.numerator);

これを試して

(*fraction).numerator;

またはこれ

fraction->numerator;
于 2013-01-17T23:32:35.130 に答える
3

演算の順序に問題があります。あなたが欲しい:

cin >> (*fraction).numerator

またはもっと慣用的に:

cin >> fraction->numerator;
于 2013-01-17T23:32:49.740 に答える
1

演算子precedence(* Operatorおよび. Operator)、参照リンクの問題があります

あなたは試すことができます:

cin >> fraction->numerator;

また

cin >> (*fraction).numerator;

enterまたは、より良い方法は、Fractionの参照をに渡すことです。たとえば、次のようにsimpilfyなります。display

void enter(Fraction& fraction)
{
  cout << "Numerator:     " << endl;
  cin >> fraction.numerator;
}
void simplify(Fraction& fraction);
void display(const Fraction& fraction);
于 2013-01-17T23:35:14.320 に答える
1

単項演算のoperator*優先順位は非常に低いため、式の演算の順序は実行される前に実行されます。これを解決するには、部分を括弧で囲んで順序を指定します。

(*fraction).number

そうfractionすれば、最初に参照が解除され、結果として返されるオブジェクトにアクセスできます。

于 2013-01-17T23:37:23.720 に答える