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

C++ C++;表达式必须是左值或函数指示符,c++,C++,这是我的代码,我已经查了好几次了,但仍然没有弄清楚该做什么。 它总是给我这个错误:C++表达式必须是左值或函数指示符,代码部分为: avg_score = (float)*&get_average_score(score_1, score_2, score_3);` 我如何修复错误? 原始错误是无法将空值转换为浮点数 avg_score=get_average_score(分数1、分数2、分数3) 我如何修复错误` #include <iostream> #include

这是我的代码,我已经查了好几次了,但仍然没有弄清楚该做什么。 它总是给我这个错误:C++表达式必须是左值或函数指示符,代码部分为:

avg_score = (float)*&get_average_score(score_1, score_2, score_3);`
我如何修复错误? 原始错误是无法将空值转换为浮点数
avg_score=get_average_score(分数1、分数2、分数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;
}   
#包括
#包括
#包括
#包括
使用名称空间std;
无效打印分数(整数分数1、整数分数2、整数分数3);
无效获取平均分数(整数分数1、整数分数2、整数分数3);
int main()
{
srand(时间(空));
智力得分为1分、2分、3分;
浮动平均分数;
分数1=rand()%21+20;
而(分数为1%2==0)
{
分数1=rand()%21+20;
}
分数2=rand()%21+20;
分数3=rand()%21+20;
打印分数(分数1、分数2、分数3);
平均分数=(浮动)*&获得平均分数(分数1、分数2、分数3);

cout您的第一个错误在于,您试图获取一个不返回值的函数来返回值。您试图引用一个指针
*&
,这不是您应该如何处理的
1) 您试图引用一个指针,但实际上是在函数上引用的
2) 您需要的是一个值,而不是指针,因此这是错误的方法

如果您需要使用指针(因为这是手头的任务),那么您需要做的就是将对
avg_score
的引用传递到您的函数中

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;
}  
并在main中将其命名为:

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; 
} 
并从main中删除
(float)*&

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


您的编码风格确实有点基本(这没关系,每个人都必须从某个地方开始),但您还有改进的余地,所以现在就花时间学习,而不是以后再努力学习(相信我,从长远来看,这会让生活变得轻松)。
与其制作一个只在平均3个数字时才起作用的函数,为什么不制作一个更模块化的函数,可以处理任意多的数字呢

尝试学习如何使用向量!如果你来自
C
,它有点像一个数组,但可以动态分配,也就是说,任意大小的向量。 看看网络上关于向量是什么以及如何使用它们的一些教程。 我不会为此编写代码,因为你应该自己学习如何做(相信我,你会更好地理解它),但基本上使用
int
的向量
std::vector
,你可以迭代所有元素,将每个元素相加,最后除以元素总数(您所做的迭代次数)以获得您的平均值


**显然,这是一个限制,但这是您的计算机的限制…*

欢迎访问stackoverflow.com。请花一些时间阅读,特别是名为和的部分。还有请和。最后,请学习如何创建。简而言之:请编辑您的问题,以包含完整的错误输出,复制粘贴为文本,包括任何pos可理解的信息注释。然后,当您添加该注释时,还要在代码中添加注释,以指出错误在代码中的位置这是什么?<代码> > GETYAVEAGEAGRIZON/<代码>为什么它不使用<代码> STD::vector < /代码>?这是C++。接受标准库,不要与它争,把事情搞得一团糟。所以你有一个函数,<代码> GETYAVEAQAGRESUB> < /COD>,它被声明为不返回值。(这就是
void
返回类型的意思)您希望它返回一个值吗?函数中甚至没有
return
语句(这会给您一个编译器错误)。也许您应该阅读?