数组作为函数参数 - 编译错误

时间:2017-04-09 13:32:19

标签: c++ arrays compiler-errors

我想做一个返回数组的函数,例如:

#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。

1 个答案:

答案 0 :(得分: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]时,就会抱怨。

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