下面的函数为什么错了
#include<stdio.h>
#include<process.h>
#include<iostream.h>
#include<fstream.h>
#include<math.h>
int a[512][512]={0};
ofstream fs("s.dat");
#define N 45
typedef long int NatureNumber;
double sum[2*N*N+1]={0};
inline double & PSD(int n,int m)
{
double p=0;
double q=0;
for(int i=0;i<512;i++)
{
for(int j=0;j<512;j++)
{
p=p+a[i][j]*cos((n*i+m*j)*0.01);
q=q+a[i][j]*sin((n*i+m*j)*0.01);
}
}
return (p*p+q*q)/(512*512);
}
void read()
{
FILE* fp;
int tmp;
int s=0;
fp=fopen("PECVDSiN.dat","r");
if(fp==NULL)
exit(-1);
for (int i=0; i<512; ++i )
{
for (int j=0; j<512; ++j )
{
fscanf(fp,"%d",&tmp);
a[i][j] = tmp;
}
}
return ;
}
int main()
{
read();
NatureNumber result[2*N*N+1]={0};
NatureNumber i, j, k;
for (i = 0; i <= N; i++)
for (j =1; j <=N; j++)
{
result[i*i+j*j]++;
sum[i*i+j*j]+=PSD(i,j)+PSD(i,-j);
}
for (i = 0; i <= N*N; i++)
(k=result[i])&&fs<<i<<"\t"<<sum[i]/(2*k)<<"\n";
return 0;
}
运行错误error C2440: 'return' : cannot convert from 'double' to 'double &'
[解决办法]
你只是double类型,不存在临时变量的问题,只需要传值出去就可以了
没有声明没有错误的原因是因为他们两个在main函数的前面。放到后面就有问题了。
[解决办法]
Surface [i][j] 和lz的程序的区别就是,Surface [i][j]是变量可以得到地址,lz程序中的表达式的值没法得到地址,定义一个变量用lz的表达式赋值。