2015-07-11 116 views
2

我想传递数组函数(* getcreditcurve)。我期待函数(* getcreditcurve)返回一个数组。主函数预计会发送几个这样的函数(* getcreditcurve),指针函数有望使用指针函数(* getcreditcurve)中给出的逻辑将数组返回给不同数组的主函数。但是我得到以下错误。有人可以帮忙解决问题吗?对不起,我经历了其他帖子/问题在这个网站,但无法获得最简单的方法来解决这个问题。我将用这个逻辑来构建其他项目,这样简化了解决主要问题的问题。传递一个数组变量函数返回一个数组变量

'#include<iostream> 
#include<cmath> 
#include<fstream> 
typedef double S1[5]; 
using namespace std; 
double *getcreditcurve(double); 

int main() 
{ 
S1 C1, C2; 

C1 = { 0.0029, 0.0039, 0.0046, 0.0052, 0.0057 }; 
C2 = { 0.0020, 0.0050, 0.0060, 0.0070, 0.0080 }; 

typedef double *issuer; 
issuer I1 = getcreditcurve(C1); 
issuer I2 = getcreditcurve(C2); 


ofstream print; 
print.open("result1.xls"); 
print << I1+1 << '\t' << I2+2 << endl; 
print.close(); 
return 0; 
} 

double *getcreditcurve(double S1[5]) 
    { 
const int cp = 5; 
typedef double curve[cp]; 
curve h; 

h[0] = 2 * S1[0]; 
h[1] = 3 * S1[1]; 
h[2] = 4 * S1[2]; 
h[3] = 5 * S1[3]; 
h[4] = 6 * S1[4]; 

return h; 
}' 

1> ------构建开始:项目:Project2中,配置:调试的Win32 ------ 1> Source.cpp 1> C:\用户\ kdatta \文件\ cqf \ C++ \ project2 \ source.cpp(12):错误C3079:初始化程序列表不能用作此赋值运算符的右操作数1> c:\ users \ kdatta \ documents \ cqf \ C++ \ project2 \ source .cpp(13):错误C3079:初始化程序列表不能用作此赋值运算符的右操作数1> c:\ users \ kdatta \ documents \ cqf \ C++ \ project2 \ source.cpp(16):error C2664:'double * getcreditcurve(double)':不能将参数1从'S1'转换为'double' 1>没有上下文可以进行这种转换(c)\ C++ \ project2 \ source.cpp(17):错误C2664:'double * getcreditcurve(double)':不能将参数1从'S1'转换为'double' 1>没有可能进行此转换的上下文 1> c:\ users \ kdatta \ documents \ cqf \ C++ \ project2 \ source.cpp(42):警告C4172:返回本地变量或临时地址 = =========生成:0成功,失败1,0最多为最新,0跳过==========

+1

在这里我再次去 - 做summat与 –

回答

0
issuer I1 = getcreditcurve(C1); 

getcreditcurve采用双指针作为参数但在声明中你只提到双..新声明将是

double *getcreditcurve(S1); or double *getcreditcurve(double *) 

和定义是

double *getcreditcurve(S1 ptr) 
{ 
const int cp = 5; 
typedef double curve[cp]; 
curve h; 

h[0] = 2 * ptr[0]; 
h[1] = 3 * ptr[1]; 
h[2] = 4 * ptr[2]; 
h[3] = 5 * ptr[3]; 
h[4] = 6 * ptr[4]; 

return h; 
}' 
+0

@ rakeb.void。感谢您对双方的快速回复。根据你的建议,我改变了我的计划。不过,我不希望把它放在excel中。我预计I + 1到3 * 0.0039 = 0.0117和I + 2到4 * 0.0060 = 0.0024并没有看到我在调试中也看不到任何错误。你能帮忙吗? – Kausik

1

向前声明是

double *getcreditcurve(double); 

而在功能实现你写

double *getcreditcurve(double S1[5]) 

这意味着

double *getcreditcurve(double *); 

变化向前声明如下:

double *getcreditcurve(double *); 

变化C1C2初始化如下:

S1 C1 = { 0.0029, 0.0039, 0.0046, 0.0052, 0.0057 }; 
S1 C2 = { 0.0020, 0.0050, 0.0060, 0.0070, 0.0080 }; 

,而不是S1 C1, C2;

阅读Where can we use list initialization知道为什么。

警告!你正在返回一个本地变量

curve h; 

让它static或改变你的逻辑。

Run Live

相关问题