下面的函数为什么错了

jover0 2008-02-28 12:41:59
#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 &'
...全文
87 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlcs8921 2008-02-28
  • 打赏
  • 举报
回复
可以用引用阿,就是你得返回引用类型才行啊
koko1998 2008-02-28
  • 打赏
  • 举报
回复
疯了,总比我快,哈哈
潜水ing....
koko1998 2008-02-28
  • 打赏
  • 举报
回复
不是在main的上面的啊,放下面就出错了。提示没有声明
Supper_Jerry 2008-02-28
  • 打赏
  • 举报
回复
你只是double类型,不存在临时变量的问题,只需要传值出去就可以了
没有声明没有错误的原因是因为他们两个在main函数的前面。放到后面就有问题了。
koko1998 2008-02-28
  • 打赏
  • 举报
回复
把&去掉就可以了
Supper_Jerry 2008-02-28
  • 打赏
  • 举报
回复
inline double & PSD(int n,int m)
把&去掉就可以了
jover0 2008-02-28
  • 打赏
  • 举报
回复
上面的两个函数为什么不用声名也没错误
jover0 2008-02-28
  • 打赏
  • 举报
回复
谢谢楼上的,怎么改正啊
BluntBlade 2008-02-28
  • 打赏
  • 举报
回复
不能把临时变量的引用返回出去。
Chappell 2008-02-28
  • 打赏
  • 举报
回复
Surface 生命期不同
lucian2007 2008-02-28
  • 打赏
  • 举报
回复
Surface [i][j] 和lz的程序的区别就是,Surface [i][j]是变量可以得到地址,lz程序中的表达式的值没法得到地址,定义一个变量用lz的表达式赋值。
jover0 2008-02-28
  • 打赏
  • 举报
回复
inline long int & h(int i,int j) //** Surface height at (i,j) ...
{ //** Note: h(i,j) can be read or written ...
while (i < 0) //**
i = i + N; //**
while (i >= N) //**
i = i - N; //**
while (j < 0) //**
j = j + N; //**
while (j >= N) //**
j = j - N; //**
//**
return Surface [i][j]; //**
}
.........................
...........................
........................
h(i,j)=0;
h(i,j)++;

这个函数为什么可以返回&,Surface [i][j]是已经定义好的整形数组
Chappell 2008-02-28
  • 打赏
  • 举报
回复
inline double PSD(int n,int m) ;

&返回一个double&,可以理解为一个地址。函数返回时栈也就不存在了,那么在栈里面分配的地址也就不可再用了。
jover0 2008-02-28
  • 打赏
  • 举报
回复
在函数前面加&有什么用啊,我看有一个程序上面说可以进行读写是什么意思

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧