求高手帮看程序错误在哪??有关c++中的函数声明定义与调用

程序如下,总是报错...报错内容在图里...似乎说是类型不符合/...
但是我也不知道为啥不符合,,,
学c++一个学期以后又过了一年多了,真是不记得啥了= =`查书又查不到555...
小女子先行谢过了!!!

#include <iostream>

#include<cmath>

using namespace std;

double Sum(double,double,int);

int main()

{

double a[6][6]={ 4,-1, 0,-1, 0, 0,

-1, 4,-1, 0,-1, 0,

0,-1, 4, 0, 0,-1,

-1, 0, 0, 4,-1, 0,

0,-1, 0,-1, 4,-1,

0, 0,-1, 0,-1, 4},

b[6]={2,1,2,2,1,2},

xx[6]={0.5,0.5,0.5,0.5,0.5,0.5},

x[6];

int i,t;

cout << "使用的初始x0各个分量为 0.5 " << endl << endl;

for (t=1; ;t++ )

{

for (i=0;i<6;i++)

{

x[i]= (b[i]-Sum(a,xx,i)/a[i][i];

xx[i]=x[i];

sum=0;

}

if (fabs(xx[i]-x[i])<10e-6) break;

if (t>40) {cout << endl << "error!" << endl; return 0;}

}

for (i=0; i<6; i++)

{

cout << "经过了" << t << "次迭代以后¸可以得到x的第" << i+1 << "个分量为" << x[i] << endl;

}

return 0;

}

double Sum(double a[][],double xx[],int i)

{

double sum=0;

int j=0;

for (;j<i;j++)

sum = sum+a[i][j]*xx[j];

for (;j<6;j++)

sum = sum+a[i][j]*xx[j];

return sum;

}
报错如下:

第1个回答  2013-12-02
把using namespace std;下面的
double Sum(double,double,int);
改成double Sum(double a[][6],double xx[],int i);追问

啊来0,0好神奇啊居然就好了...

感谢!!
不过还是想问一句这是为虾米呢...?
为什么必须要是a[][6]呢?

追答

我们知道计算机里面内存存放数据从本质上讲是一个一维数组,不管你定义的是一维还是多维的数组,所以所有的二维数组实际上也需要映射成一维数组来在内存中进行存放。
举个例子,比如double a[2][2],假设这个变量在内存中的起始地址是100,然后每个double占8个字节,所以a[0]]0]就是第一个数占据100~107的内存空间,a[0][1]是第二个数占108~115,a[1][0]是第三个数占116~123,a[1][1]是第四个数占124~131。
那么现在,如果我们声明的是double a[2][3],而假设a的起始地址仍然是100,那么请问a[1][0]应该是什么位置?因为现在每行多了一个数,所以这个二维数组的第二行第一个数在映射到一维数组的时候实际上是第四个数了,占据的内存空间为124~131,而不再是以前的116~123(现在这个位置是a[0][2])
所以如果直接给出a[][]这样一个二位数组,但是其中的每行多少个数据又不确定的话,对于a[i][j]这样的语句,计算机没办法知道到底应该对应到哪个数据了。所以需要a[][6]这样,确定一下每行的大小,计算机就可以正确的干活了。

本回答被提问者采纳
相似回答