C ++表达式必须是左值或函数指示符

时间:2017-10-01 23:09:37

标签: c++

这是我的代码我已经多次查看了该做什么,但仍然没有想出要做什么。 它一直给我这个错误: C ++表达式必须是左值或函数指示符与代码的一部分:

avg_score = (float)*&get_average_score(score_1, score_2, score_3);`

我该如何修复错误? 原始错误无法将void转换为float avg_score = get_average_score(score_1, score_2, score_3); 我该如何修复错误?“

#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <ctime>
using namespace std;
void print_scores(int score_1, int score_2, int score_3);
void get_average_score(int score_1, int score_2, int score_3);
int main()
{
srand(time(NULL));
int score_1, score_2, score_3;
float avg_score;

score_1 = rand() % 21 + 20;
while (score_1 % 2 == 0)
{
    score_1 = rand() % 21 + 20;
}

score_2 = rand() % 21 + 20;
score_3 = rand() % 21 + 20;

print_scores(score_1, score_2, score_3);
avg_score = (float)*&get_average_score(score_1, score_2, score_3);

cout << fixed << setprecision(1);
cout << "Average score = " << avg_score <<
    endl;
return 0;
}

void print_scores(int score_1, int score_2, int score_3)
{
cout << "score 1 = " << score_1 << endl << "score 2 = " << score_2 << endl 
<< "score 3 = " << score_3 << endl;
}

void get_average_score(int score_1, int score_2, int score_3)
{
(float)(score_1 + score_2 + score_3) / (float)3;
}   

1 个答案:

答案 0 :(得分:1)

您的第一个错误在于您正在尝试获取一个不返回值的函数来返回值。你试图引用一个指针avg_score,而不是你应该如何处理这个指针 1)你试图引用一个指针,但你已经在一个函数上完成了它 2)你想要一个值,而不是指针所以它是错误的方法。

如果你需要使用指针(因为那是手头的任务),那么你需要做的是将void get_average_score(float * avg_score, int score_1, int score_2, int score_3) { *avg_score = (score_1 + score_2 + score_3) / 3.0; } 的引用传递给你的函数。

get_average_score(&avg_score, score_1, score_2, score_3);

并使用以下方式调用它:

void get_average_score(float * avg_score, int score_1, int score_2, int score_3);

并且不要忘记更新标头声明:

float

如果您不必使用指针,最简单的解决方法是实际返回一个值。

将函数声明为类型float get_average_score(int score_1, int score_2, int score_3);

get_average_score

并将float get_average_score(int score_1, int score_2, int score_3) { return (score_1 + score_2 + score_3) / 3.0; } 函数编辑为:

(float)*&

并从main中删除C

这意味着您的函数将返回一个浮点值,该值将在返回时存储在avg_score中 另请注意,通过将分母更改为3.0而不是3,您不需要将结果类型转换为浮点数。

你的编码风格确实有点基本(这是好的,每个人都必须从某个地方开始),但是你还有改进的余地,所以花点时间去学习而不是以后挣扎(相信我,这会使生活更轻松从长远来看。) 而不是制作一个仅在你平均3个数字时起作用的功能,为什么不制作一个更符合你想要的数字的模块化功能!

尝试学习如何使用矢量!如果你来自int它有点像一个数组,但可以动态分配,即你想要的任何大小。 浏览网络,了解一些关于哪些向量以及如何使用它们的教程。 我不会写出这个代码,因为你应该学习如何自己做(相信我你会更好地理解它),但基本上使用std::vector<int>的{​​{1}}向量你可以迭代它们并将每个元素添加到一起然后在末尾除以元素总数(你做的迭代次数)来获得平均值!

**显然是一个限制,但这是你电脑的限制...... *