2017-04-09 64 views
-6

我想這樣做,返回一個數組,例如一個函數:數組作爲函數參數 - 編譯錯誤

#include "iostream" 
#include "string" 

using namespace std; 

void minus(float v1[3], float v2[3], float v3[3][3]); 

int main() 
{ 
    float a[3] = {1,0,0}; 
    float b[3] = {3,2,5}; 
    float c[3]; 
    minus(a,b,c); 

    cout << c[0] << "C1" << endl; 
    cout << c[1] << "C2" << endl; 
    cout << c[2] << "C3" << endl; 
    cin.get(); 
    return 0; 
} 

void minus(float v1[3], float v2[3], float v3[3]) 
{ 
    int i; 
    float aux; 
    for (i = 0; i < 2; i++) 
    { 
     v3[i]=v1[i]-v2[i]; 
     return; 
    } 
} 

的錯誤是

[Error] cannot convert 'float*' to 'float (*)[3]' for argument '3' to 'void rectavector(float*, float*, float (*)[3])'" 

我不明白這個錯誤。我通過引用返回v3。

+4

C和C++是完全不同的語言。 –

+0

對於這種情況。你可以同時使用 – Alvaro

+0

這是你唯一的錯誤嗎? – iafisher

回答

1

編譯錯誤總是附帶一個行號,所以你知道哪一行代碼導致了這個問題。

發佈時,您可以通過評論標記相關行,例如,

float c[3]; 
minus(a,b,c); // COMPILATION ERROR HERE 

假設你的編譯錯誤是真的,我猜是這樣,問題是在向前聲明和你的函數的定義之間的不匹配:

void minus(float v1[3], float v2[3], float v3[3][3]); 
... (some code omitted) 
void minus(float v1[3], float v2[3], float v3[3]) 

編譯器檢查你的代碼從上到下。當它看到您的minus功能收到float v3[3][3],並且您嘗試發送它float c[3]時,它會抱怨。

如果您的編譯器輸出額外的錯誤消息,您可以看到它抱怨真正的問題 - 之後聲明和定義之間不匹配。