2017-04-09 66 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]时,它会抱怨。

如果您的编译器输出额外的错误消息,您可以看到它抱怨真正的问题 - 之后声明和定义之间不匹配。