2015-07-11 113 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

相關問題