【问题标题】:Can't seem to call function correctly in C++似乎无法在 C++ 中正确调用函数
【发布时间】:2016-05-19 13:38:33
【问题描述】:

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

我正在学习 C++ 课程,但有一个作业我遇到了麻烦。我不断收到错误:所有三个数组声明都出现“'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];
}

【问题讨论】:

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


    【解决方案1】:

    如果你想让函数保持void addArrays(int *array1, int *array2, int *array3),你可以使用std::arraydata方法。

    #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::arrays 作为参数,如下所示:

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

    【讨论】:

      【解决方案2】:

      像这样改变函数声明

      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() );   
      

      【讨论】:

        【解决方案3】:

        您的函数期待int*,而您正在传递array&lt;int,20&gt;*

        试试这个。

        #include <iostream>
        
        #include <array>
        using namespace std;
        void addArrays( array< int, 20 >&,  array< int, 20 >&,  array< int, 20 >&);
        
        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(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];
        }
        

        【讨论】:

          【解决方案4】:

          以下签名

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

          不采用 std:array -- 如果将其更改为,它将编译

          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, ......)
          

          【讨论】:

            猜你喜欢
            • 2014-05-21
            • 2017-01-09
            • 1970-01-01
            • 2011-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-31
            相关资源
            最近更新 更多