【发布时间】:2018-08-12 15:59:30
【问题描述】:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
const int OPERAND_RANGE = 100;
void doOneProblem(char &op);
void doOneSet(char &op);
void generateOperands(int &num1, int &num2);
void calculateAnswer(int &num1, int &num2, int &answer, char &op);
void checkAnswer(int num1, int num2, int &answer, int &userAnswer, char &op);
int main() {
srand(static_cast<unsigned>(time(0)));
doOneSet('+');
}
void generateOperands(int &num1, int &num2) {
num1 = rand() % (OPERAND_RANGE + 1);
num2 = rand() % (OPERAND_RANGE + 1);
}
void calculateAnswer(int &num1, int &num2, int &answer, int &userAnswer, char &op) {
if (op == '+') {
answer = num1 + num2;
} else if (op == '-') {
answer = num1 - num2;
} else if (op == '*') {
answer = num1 * num2;
} else if (op == '/') {
answer = num1 / num2;
} else {
cout << "Not an accepted operator.";
}
}
void doOneProblem(char &op) {
int num1, num2, answer, userAnswer;
char op;
generateOperands(num1, num2);
calculateAnswer(num1, num2, answer, userAnswer, op);
checkAnswer(num1, num2, answer, userAnswer, op);
}
void checkAnswer(int num1, int num2, int &answer, int &userAnswer, char &op) {
cout << "What is " << num1 << " " << op << " " << num2 << "?: " << endl;
cin >> userAnswer;
if (userAnswer == answer) {
cout << "Correct!" << endl;
} else {
cout << "Incorrect" << endl;
}
}
void doOneSet(char &op) {
for (int i = 0; i < 5; i++) {
doOneProblem(op);
}
}
大家好,我正在练习使用传递引用变量。当我在 main 中调用函数 doOneSet 时,出现错误:
initial value of reference to non-const must be an lvalue
我的目标是将操作符 (op) 变量从 doOneSet 一直传递回 calculateAnswer() 函数,该函数应根据输入的字符确定答案。
错误信息:
a7_1.cpp:18:5: error: no matching function for
call to 'doOneSet'
doOneSet('+');
^~~~~~~~
a7_1.cpp:10:6: note: candidate function not
viable: expects an l-value for 1st
argument
void doOneSet(char &op);
^
1 error generated.
【问题讨论】:
-
为方便起见,请在发生错误的行中添加。
-
'+'是const char,而不是char。注意您的方法doOneProblem(char &op)还声明了一个本地char op变量。删除它。
标签: c++ constants pass-by-reference