传递一个数组变量函数返回一个数组变量

时间:2015-07-11 14:21:32

标签: c++ arrays

我正在尝试将数组传递给函数(* getcreditcurve)。我期待函数(* getcreditcurve)返回一个数组。主要功能是发送几个这样的数组到函数(* getcreditcurve),指针函数有望使用指针函数(* getcreditcurve)中给出的逻辑将数组返回给不同数组的main函数。但是我得到了以下错误。有人可以帮忙解决问题吗?对不起,我在本网站上浏览了其他帖子/问题,但无法通过最简单的方法解决此问题。我将使用这个逻辑来构建其他项目,以简化问题只是为了解决主要问题。

'#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&gt; ------ Build build:Project:Project2,Configuration:Debug Win32 ------ 1 GT; Source.cpp 1&gt; c:\ users \ kdatta \ documents \ cqf \ c ++ \ project2 \ source.cpp(12):错误C3079:初始化列表不能用作此赋值运算符的右操作数 1&gt; c:\ users \ kdatta \ documents \ cqf \ c ++ \ project2 \ source.cpp(13):错误C3079:初始化列表不能用作此赋值运算符的右操作数 1&gt; c:\ users \ kdatta \ documents \ cqf \ c ++ \ project2 \ source.cpp(16):错误C2664:&#39; double * getcreditcurve(double)&#39; :无法转换来自&#39; S1&#39;到&#39;加倍 1 GT;没有可以进行此转换的上下文 1&gt; c:\ users \ kdatta \ documents \ cqf \ c ++ \ project2 \ source.cpp(17):错误C2664:&#39; double * getcreditcurve(double)&#39; :无法转换来自&#39; S1&#39;到&#39;加倍 1 GT;没有可以进行此转换的上下文 1&gt; c:\ users \ kdatta \ documents \ cqf \ c ++ \ project2 \ source.cpp(42):警告C4172:返回局部变量的地址或临时 ==========构建:0成功,1个失败,0个最新,0个跳过==========

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

issuer I1 = getcreditcurve(C1); 

getcreditcurve将双指针作为参数但在声明中你只提到double..new声明将

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;
}'