我正在尝试将数组传递给函数(* 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个跳过==========
答案 0 :(得分:1)
前瞻声明是
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
或更改您的逻辑。
答案 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;
}'