2016-01-20 46 views
0

我的問題是:調用函數的類型/引用/指針符號和函數定義中的參數有區別嗎?輸入類型和參數類型之間的差別

這個問題上來,由於下面的錯誤我:

myClass.cpp:358:44: error: no matching function for call to 'myClass::myFunction(double&, double&, double (*)[24], double (*)[30], int&)' 
myClass.cpp:358:44: note: candidate is: 
myClass.h:29:8: note: void myClass::myFunction(double&, double&, double**, double**, int&) 

這是非常奇怪的是,編譯器建議我應該使用double&的第一個參數,因爲實際上一個給一個變量,只是double。第二個參數相同。但確定我可以接受...爲什麼第三個和第四個參數不匹配?

double a,b,c[24],d[30]; 
myFunction(a, b, &c, &d,e); 

emyClass一個int屬性。功能是

void myClass::myFunction(double& a, double& b, double *c[24], double *d[30], int& e) 
+0

因爲'e'是一個'double',而不是'int'? – TemplateRex

+0

更改int,我的錯誤 – Ruben

回答

1

編譯器告訴你,在函數聲明的參數類型不與函數獲取調用的方法相匹配。

當你有這樣的錯誤,你需要通過每個參數類型,並找出哪個(s)負責的錯誤。

在你的情況下,第三個和第四個參數是有問題的。

參數類型double *c[24]表示由double組成的24個指針的數組。

所使用的參數是&c,其中,由於你的

double c[24]; 

聲明意味着一個指針的24 double秒的陣列。

方法來解決這個問題:

方法1:更改聲明使用的指針數組

void myClass::myFunction(double& a, double& b, double (*c)[24], double (*d)[30], int& e) 

然後,呼叫可保持不變。

方法2:更改聲明使用指針

void myClass::myFunction(double& a, double& b, double *c, double *d, int& e) 

,然後改變該呼叫到:

myFunction(a, b, c, d,e); 
//    ^^ No & operator 
// An array decays to a pointer to the first element 

更多關於指向數組和數組指針:C pointer to array/array of pointers disambiguation

1

由於myFunction預計double *[24],這與double*類型的24個元素,而不是double (*)[24],這是一個指向陣列double[24]陣列,它們是不相同的。

嘗試

double a, b, *c[24], *d[30]; 
myFunction(a, b, c, d, e); 

LIVE

相關問題