'无法将参数“1”的 'float' 转换为 'float*'
'Cannot convert 'float' to 'float*' for argument '1'
我是ICT学子,学的是C++,觉得很有意思。然而,在试验过程中,我想出了一些我自己无法修复也无法在网上找到的东西。
这是代码:
#include <iostream>
using namespace std;
float average(float array[10], float &average){
int i = 0;
for( i = 0; i != 10; i++ ){
cout << "Vett ("<<i<<") = ";
cin >> array[i];
while(cin.fail())
{
cin.clear();
cin.ignore();
system("Color 5C");
cout << "\nPlease insert a number: ";
cin >> array[i];
}
average = average + array[i];
}
average = average / 10;
return array[10];
return average;
}
main(void){
float vett[10], media;
int i;
char loop;
vett[10] = 0;
media = 0;
do{
system("cls");
system("Color 00");
cout<<"****************************************"<<endl;
cout<<"*** INSER THE DATA TO COMPUTE ***"<<endl;
cout<<"****************************************\n"<<endl;
/* for( i = 0; i != 10; i++ ){
cout << "Vett ("<<i<<") = ";
cin >> vett[i];
while(cin.fail())
{
cin.clear();
cin.ignore();
system("Color 5C");
cout << "\nPlease insert a number: ";
cin >> vett[i];
}
media = media + vett[i];
}
media = media / 10;
*/
average(vett[10],media);
for( i = 0; i != 10; i++ ){
cout << vett[i]<<" ";
}
if(media == 0){
cout << "\nATTENTION the average equals to = "<<media<<endl;
}
else{
cout << "\nThe average is"<<media<<endl;
}
printf("\n");
cout << "\nDo You want to continue? Y/N";
cin >> loop;
}
while(loop == 'Y' || loop == 'y');
system("pause");
}
出于某种原因,我无法在 'average' 函数中将数组设置为指针 (&array),可能是因为数组已经是指针。尽管如此,删除它会给我以下错误:
"Cannot convert 'float' to 'float*' for argument '1' to 'float average(float*,float&)'
如果我这样调用函数
average(&vett[10],media);
它有效,但 returns 数组中的值很奇怪。
如您所见,我评论了我放在函数中的相同内容,它运行得很好,除非……我把它放在函数中。我假设我在函数调用上做错了什么,有人能帮我理解吗?
方括号中的数字有两种含义:
- 在像
float vett[10];
这样的声明中它是数组的大小
- 不在声明中时,如
average(&vett[10],media);
表示数组的第11个元素。
average(&vett[10],media);
正在将第十一个元素的地址传递给函数。该函数将其解释为数组的开头,这是错误的,并且在访问数组外部的元素时会导致未定义的行为。
因为要传递整个数组,所以应该使用
average(vett,media);
首先,请注意 main(void){
不是 main
的有效签名。
应该是:
int main(void){
然后:
float vett[10];
vett[10] = 0;
这是无效的。数组索引从 0 开始,因此索引 10 超出范围,因为它需要大小为 11 的数组。
此外,由于您的 average
函数将浮点数组作为第一个参数,您需要以这种方式传递它:
average(vett,media);
使用:
average(&vett[10],media);
将传递一个指向数组后面的数据的指针,所以显然你会得到垃圾值。
- 不要在 C++ 中使用
func(void)
,它已被弃用。请改用 func()
。
- 如果有
float vett[10];
,则vett[10]
无效。您只能使用 vett[0 .. 9]
float average(float array[10], float &average)
实际上意味着
float average(float *array, float &average)
.
(第二种形式是更常见的声明指针参数的方式。)
如果你想用 vett
作为参数调用它,只需使用 average(vett, media);
数组的名称,当用作指针时,会自动转换为 指向数组第一个元素的指针。所以这里
average(vett, media);
vett
表示&vett[0]
.
我再补充一点帮助...
您的平均方法末尾有两个 return 语句。最后一个(你想要的)永远不会达到,因为该方法将 return 第一个...
在函数中而不是这个
float average(float array[10], float &average){
你必须把这个:
float average(float *array, float &average){
我是ICT学子,学的是C++,觉得很有意思。然而,在试验过程中,我想出了一些我自己无法修复也无法在网上找到的东西。 这是代码:
#include <iostream>
using namespace std;
float average(float array[10], float &average){
int i = 0;
for( i = 0; i != 10; i++ ){
cout << "Vett ("<<i<<") = ";
cin >> array[i];
while(cin.fail())
{
cin.clear();
cin.ignore();
system("Color 5C");
cout << "\nPlease insert a number: ";
cin >> array[i];
}
average = average + array[i];
}
average = average / 10;
return array[10];
return average;
}
main(void){
float vett[10], media;
int i;
char loop;
vett[10] = 0;
media = 0;
do{
system("cls");
system("Color 00");
cout<<"****************************************"<<endl;
cout<<"*** INSER THE DATA TO COMPUTE ***"<<endl;
cout<<"****************************************\n"<<endl;
/* for( i = 0; i != 10; i++ ){
cout << "Vett ("<<i<<") = ";
cin >> vett[i];
while(cin.fail())
{
cin.clear();
cin.ignore();
system("Color 5C");
cout << "\nPlease insert a number: ";
cin >> vett[i];
}
media = media + vett[i];
}
media = media / 10;
*/
average(vett[10],media);
for( i = 0; i != 10; i++ ){
cout << vett[i]<<" ";
}
if(media == 0){
cout << "\nATTENTION the average equals to = "<<media<<endl;
}
else{
cout << "\nThe average is"<<media<<endl;
}
printf("\n");
cout << "\nDo You want to continue? Y/N";
cin >> loop;
}
while(loop == 'Y' || loop == 'y');
system("pause");
}
出于某种原因,我无法在 'average' 函数中将数组设置为指针 (&array),可能是因为数组已经是指针。尽管如此,删除它会给我以下错误:
"Cannot convert 'float' to 'float*' for argument '1' to 'float average(float*,float&)'
如果我这样调用函数
average(&vett[10],media);
它有效,但 returns 数组中的值很奇怪。 如您所见,我评论了我放在函数中的相同内容,它运行得很好,除非……我把它放在函数中。我假设我在函数调用上做错了什么,有人能帮我理解吗?
方括号中的数字有两种含义:
- 在像
float vett[10];
这样的声明中它是数组的大小 - 不在声明中时,如
average(&vett[10],media);
表示数组的第11个元素。
average(&vett[10],media);
正在将第十一个元素的地址传递给函数。该函数将其解释为数组的开头,这是错误的,并且在访问数组外部的元素时会导致未定义的行为。
因为要传递整个数组,所以应该使用
average(vett,media);
首先,请注意 main(void){
不是 main
的有效签名。
应该是:
int main(void){
然后:
float vett[10];
vett[10] = 0;
这是无效的。数组索引从 0 开始,因此索引 10 超出范围,因为它需要大小为 11 的数组。
此外,由于您的 average
函数将浮点数组作为第一个参数,您需要以这种方式传递它:
average(vett,media);
使用:
average(&vett[10],media);
将传递一个指向数组后面的数据的指针,所以显然你会得到垃圾值。
- 不要在 C++ 中使用
func(void)
,它已被弃用。请改用func()
。 - 如果有
float vett[10];
,则vett[10]
无效。您只能使用vett[0 .. 9]
float average(float array[10], float &average)
实际上意味着
float average(float *array, float &average)
.
(第二种形式是更常见的声明指针参数的方式。)
如果你想用vett
作为参数调用它,只需使用average(vett, media);
数组的名称,当用作指针时,会自动转换为 指向数组第一个元素的指针。所以这里average(vett, media);
vett
表示&vett[0]
.
我再补充一点帮助...
您的平均方法末尾有两个 return 语句。最后一个(你想要的)永远不会达到,因为该方法将 return 第一个...
在函数中而不是这个
float average(float array[10], float &average){
你必须把这个:
float average(float *array, float &average){