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)
//一个arraySize总是必须是const吗?它是如此在数组创建后它不会变形?是的,它必须是const,而且,它必须是一个常量表达式,这意味着它的大小必须在编译时知道(而不是在运行时).如果要调整数组大小,那么最好使用标准容器std :: vector.或者,如果需要固定大小的数组,则使用动态分配的数组,但直到运行时才知道大小
/*这个数组是在函数averageN()中创建的,但为什么呢?我不能创建它顶部并引用它?*/如果你说小数,那么不,它是一个全局变量,你可以从任何地方使用它.
//在创建它之前,为什么要在这里写出函数的名称?您必须在使用之前在C++中声明任何名称.由于您在main中调用此函数,因此必须至少事先声明它.您也可以在main之前提供定义(正文).
//为什么必须在这里创建数组?
哎呀,你的代码中似乎有一个很大的混乱.事实上,你有两个名为averageN的函数,一个是不带参数的averageN,另一个是带有double数组的AveraeN.你从未定义过第一个,只是声明了.
错误:
doubleTotal未初始化.好吧,它不会
double arrayTotal; 改变
double arrayTotal = 0.0;
主要的未解决的外部 - 这是您正在进行的主要的AverageN功能.你从来没有写过它的身体.您创建了一个带有数组的函数,由于您的数组是全局的,因此该数组无用.只需从AverageN定义中删除数组参数即可.
HTH
PS阅读S. Lippmann的C++入门.对于C++来说,这是初学者的最佳书籍.IMO :)