我有很多关于c ++的问题让我很困惑

OVE*_*ONE 4 c++ arrays initialization unresolved-external

在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;
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*yan 6

  1. //一个arraySize总是必须是const吗?它是如此在数组创建后它不会变形?是的,它必须是const,而且,它必须是一个常量表达式,这意味着它的大小必须在编译时知道(而不是在运行时).如果要调整数组大小,那么最好使用标准容器std :: vector.或者,如果需要固定大小的数组,则使用动态分配的数组,但直到运行时才知道大小

  2. /*这个数组是在函数averageN()中创建的,但为什么呢?我不能创建它顶部并引用它?*/如果你说小数,那么不,它是一个全局变量,你可以从任何地方使用它.

  3. //在创建它之前,为什么要在这里写出函数的名称?您必须在使用之前在C++中声明任何名称.由于您在main中调用此函数,因此必须至少事先声明它.您也可以在main之前提供定义(正文).

  4. //为什么必须在这里创建数组?

哎呀,你的代码中似乎有一个很大的混乱.事实上,你有两个名为averageN的函数,一个是不带参数的averageN,另一个是带有double数组的AveraeN.你从未定义过第一个,只是声明了.

错误:

  1. doubleTotal未初始化.好吧,它不会 double arrayTotal; 改变

    double arrayTotal = 0.0;

  2. 主要的未解决的外部 - 这是您正在进行的主要的AverageN功能.你从来没有写过它的身体.您创建了一个带有数组的函数,由于您的数组是全局的,因此该数组无用.只需从AverageN定义中删除数组参数即可.

HTH

PS阅读S. Lippmann的C++入门.对于C++来说,这是初学者的最佳书籍.IMO :)