经过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++开发以来已经有一段时间了):

  • arraytotal尚未初始化

    我怀疑您的编译器将其标记为错误,以确保您执行此操作。如果不这样做,则无法确定它将初始化为什么。传统上,对于调试版本,C/C++将内存初始化为某些调试值,以帮助识别未初始化的变量。初始化时将arrayTotal设置为0,这应该消失。 (最佳实践)

    例如double arrayTotal = 0;
  • 主外部引用

    我怀疑这是因为您的averageN原型(prototype)与以后定义的方法不匹配。原型(prototype)需要包括参数的类型以及返回类型。将原型(prototype)从 double averageN();更改为双重平均值N(double []); ,我相信它将解决该问题。
  • arraySize是否必须始终为const?这样创建数组后它不会改变吗?

    由于使用它来定义传递给averageN的数组的大小,因此可以。像这样设置数组的大小需要一个常数。
  • 该数组在函数averageN()中创建,但是为什么呢?
    我不能仅在顶部创建它并引用它吗?

    它不是在averageN中创建的。它是averageN的形式参数。 averageN的调用者需要提供适当的变量并将其传递。然后从方法内部,通过小数位数对其进行访问。
  • 为什么甚至在创建函数之前就必须在此处写下函数的名称?

    这是功能原型(prototype)。在定义函数之前,必须先在代码中引用该函数。这也可以通过其他方式解决,例如在对均值N进行所有使用之前将其定义移开。
  • 09-25 16:38