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

标签 c++ arrays pass-by-reference

编辑:感谢大家花时间回答。我一一尝试了大家的建议,还是不行。我真的很想把这个交上来,而不必向教授寻求帮助,并表明我不知道该怎么做,但在这一点上,我想我必须这样做。感谢您抽出时间提供帮助!谢谢。

我正在学习 C++ 类(class),但有一项作业让我遇到了麻烦。我不断收到错误消息:所有三个数组声明均出现“expected primary-expression before ‘int’”。并且所有三个传递地址都“未在此范围内声明”。这是我通常使用的编译器。我尝试了不同的编译器,我得到的错误是“prog.cpp:14:38: error: cannot convert 'std::array' to 'int' for argument '1' to 'void addArrays(int*, int*, int*)' addArrays(&array1,&array2,&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];
}

最佳答案

如果你想让函数保持不变 void addArrays(int *array1, int *array2, int *array3) 你可以使用 std 的 data 方法::数组

#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];
}

或者使函数将 std::array 作为参数,如下所示:

#include <iostream>
#include <array>
using namespace std;
void addArrays(const array<int,20> &array1, 
                    const array<int,20> &array2,
                    array<int,20> &array3);
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(const array<int,20> &array1, 
                    const array<int,20> &array2,
                    array<int,20> &array3)
{
    int i;
    for(i=0; i<20; ++i) 
        array3[i] = array1[i]+array2[i];
}

关于c++ - 似乎无法在 C++ 中正确调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37324955/

相关文章:

Swift:如何存储对 Double、Int 的引用

php - 通过引用传递;为什么原始对象没有改变?

Java-防止HashMap影响原始值

c++ - 根据字体名称和样式(粗体/斜体)获取字体文件名

java - 如何使用 native 代码以编程方式查找 Java 局部变量的内存地址?

c++ - C++如何保证基类和派生类的概念

php - 如何在 PHP 中合并多维数组以便能够将它们输出在一起

c++ - 在 Linux Ubuntu 中使用 C++ 过滤以太网数据包

c - 初始化数组 - 警告 : assignment makes integer from pointer without a cast

c++ - 为什么第二个代码有效而第一个无效?