经过2年的Java学习,大约3周前,我开始学习c++。看来是如此不同,但我要到达那里。我的讲师是一个可爱的家伙,但是任何时候我问一个问题,为什么是这种方式或这种方式。他只是回答“因为它是”。
下面的代码中有很多注释,其中有一些随机的问题,但是主要问题是我遇到了两个构建错误,一个问题说arraytotal尚未初始化(即使我找到了它的值),另一个问题说了一个外部引用主要。
有人会介意阅读代码并回答其中的一些评论吗,也许是我当时遇到的总体问题?
#include<string>
#include<fstream>
#include<ostream>
using namespace std;
//double decimals[5] ={2,4,6,8,10};
const int arraySize = 5;
// does an arraySize have to be const always? is it so it doesnt channge after the array has been created?
//double decimals[arraySize];
/*
this array is being created in the function averageN() but why?
cant i just create it up top and reference it in?
*/
// why do you have to write the name of the function up here before you even create it?
double averageN();
int main()
{
averageN();
return 0;
}
// why does the array have to be created here?
double averageN(double decimals[arraySize])
{
double average;
double arrayTotal;
for (int i = 0; i<5;i++)
{
// fills with random numbers from 0 - 10
decimals[i] = (0+(rand()%10));
}
// find the total of all the elements in the array
for (int i = 0; i < arraySize;i++)
{
double currentElement = decimals[i];
arrayTotal = (currentElement+arrayTotal);
//arrayTotal +=decimals[i]) ;
}
// return the average
average = (arrayTotal/arraySize);
return 0.0;
}
最佳答案
我的快速回答而无需仔细检查(自从我用C++开发以来已经有一段时间了):
我怀疑您的编译器将其标记为错误,以确保您执行此操作。如果不这样做,则无法确定它将初始化为什么。传统上,对于调试版本,C/C++将内存初始化为某些调试值,以帮助识别未初始化的变量。初始化时将arrayTotal设置为0,这应该消失。 (最佳实践)
例如double arrayTotal = 0;
我怀疑这是因为您的averageN原型(prototype)与以后定义的方法不匹配。原型(prototype)需要包括参数的类型以及返回类型。将原型(prototype)从 double averageN();更改为至双重平均值N(double []); ,我相信它将解决该问题。
由于使用它来定义传递给averageN的数组的大小,因此可以。像这样设置数组的大小需要一个常数。
我不能仅在顶部创建它并引用它吗?
它不是在averageN中创建的。它是averageN的形式参数。 averageN的调用者需要提供适当的变量并将其传递。然后从方法内部,通过小数位数对其进行访问。
这是功能原型(prototype)。在定义函数之前,必须先在代码中引用该函数。这也可以通过其他方式解决,例如在对均值N进行所有使用之前将其定义移开。