首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

下面的函数为什么错了解决方案

2012-04-12 
下面的函数为什么错了#includestdio.h#includeprocess.h#includeiostream.h#includefstream.h#inc

下面的函数为什么错了
#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的表达式赋值。

热点排行