传递一个数组变量函数返回一个数组变量
我想传递数组函数(* 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跳过==========
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;
}'
@ rakeb.void。感谢您对双方的快速回复。根据你的建议,我改变了我的计划。不过,我不希望把它放在excel中。我预计I + 1到3 * 0.0039 = 0.0117和I + 2到4 * 0.0060 = 0.0024并没有看到我在调试中也看不到任何错误。你能帮忙吗? – Kausik
向前声明是
double *getcreditcurve(double);
而在功能实现你写
double *getcreditcurve(double S1[5])
这意味着
double *getcreditcurve(double *);
变化向前声明如下:
double *getcreditcurve(double *);
变化C1
和C2
初始化如下:
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
或改变你的逻辑。
在这里我再次去 - 做summat与 –