似乎无法在C ++中正确调用函数

时间:2016-05-19 13:38:33

标签: c++ arrays pass-by-reference

编辑:谢谢大家花时间回答。我逐个尝试了每个人的建议,但仍然没有成功。我真的很想把这个放进去,而不必向教授寻求帮助,并表明我无法弄清楚如何去做,但在这一点上,我想我必须做到这一点。感谢您抽出宝贵的时间来帮忙!谢谢。

我参加了一门C ++课程并完成了我遇到麻烦的任务。我一直收到错误:"在' int'"'''''''通过所有三个数组声明。 "未在此范围内宣布"通过所有三个传递地址。这是我经常使用的编译器。我尝试了一个不同的编译器,我得到的错误是" prog.cpp:14:38:错误:无法转换' std :: array '到' int '争论' 1' to' void addArrays(int *,int *,int *)'      addArrays(安培; ARRAY1,&安培;数组2,&安培; ARRAY3);" 我不太确定发生了什么,因为我是初学者,并希望有人可以告诉我这些错误是什么意思以及我可以做些什么来解决它们。先感谢您。这是我的代码:

#include <iostream>
#include <array>
using namespace std;
void addArrays(int*, int*, int*);

int main()
{
    array< int, 20 >array1 = 
        {7,45,90,1,33,254,3,8,9,4,2,6,77,5,9,2,22,4,12,6};
    array< int, 20 >array2 =
        {88,4,6,75,1,12,33,99,66,88,7,4,44,4,3,13,5,4,9,3};
    array< int, 20 >array3;

    addArrays(&array1,&array2,&array3);   

    cout << "Array1 + Array2 = Array3" << endl;
    int j;
    for(j=0; j<20; ++j)
        cout << array1[j] << "+" << array2[j] << "=" << array3[j] << endl;

    return 0;
}

void addArrays(int *array1, int *array2, int *array3)
{
    int i;
    for(i=0; i<20; ++i) 
        array3[i] = array1[i]+array2[i];
}

4 个答案:

答案 0 :(得分:1)

如果您希望保留该功能void addArrays(int *array1, int *array2, int *array3)您可以使用data的{​​{1}}方法。

std::array

或者让函数将#include <iostream> #include <array> using namespace std; void addArrays(int*, int*, int*); int main() { array< int, 20 >array1 = {7,45,90,1,33,254,3,8,9,4,2,6,77,5,9,2,22,4,12,6}; array< int, 20 >array2 = {88,4,6,75,1,12,33,99,66,88,7,4,44,4,3,13,5,4,9,3}; array< int, 20 >array3; addArrays(array1.data(),array2.data(),array3.data()); cout << "Array1 + Array2 = Array3" << endl; int j; for(j=0; j<20; ++j) cout << array1[j] << "+" << array2[j] << "=" << array3[j] << endl; return 0; } void addArrays(int *array1, int *array2, int *array3) { int i; for(i=0; i<20; ++i) array3[i] = array1[i]+array2[i]; } s作为这样的参数:

std::array

答案 1 :(得分:0)

更改功能声明,如

void addArrays( const std::array<int. 20> &, 
                const std::array<int, 20> &, 
                std::array<int, 20> &);

并将其称为

addArrays( array1, array2, array3 );   

另一种方法是将函数声明为

void addArrays( const int *, const int *, int * );

但称之为

addArrays( array1.data(), array2.data(), array3.data() );   

答案 2 :(得分:0)

以下签名

addArrays(int*, int*, int*);

不接受std:数组 - 如果将其更改为

,则会编译
void addArrays(array< int, 20 > *array1, array< int, 20 > *array2, array< int, 20 > *array3)
{
    int i;
    for(i=0; i<20; ++i) 
        (*array3)[i] = (*array1)[i]+(*array2)[i];
}

如果您将原型更改为

void addArrays(array< int, 20 > &array1, array< int, 20 > &array2, ......)

答案 3 :(得分:0)

您的功能期待export interface IDatabaseModel extends any { } 并且您正在通过int*

试试这个。

array<int,20>*