0

我有一个简单的程序。主要由我的教授提供。我们要编写 3 个函数,称为enter, simplify, 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

您遇到运算符优先级(* Operator. Operator)的问题,参考链接

你可以试试:

cin >> fraction->numerator;

或者

cin >> (*fraction).numerator;

或者更好的方法是将 Fraction 的引用传递给enter,simpilfydisplay,例如:

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 回答