【问题标题】:Vector as an argument in function向量作为函数中的参数
【发布时间】:2014-09-03 08:10:48
【问题描述】:

我有这样的代码: 请原谅我用波兰语命名的东西,我希望这不是问题。如果你愿意,我可以改变它们。

#include <iostream>
#include <vector>
#include <math.h>

using namespace std;

//a few unimportant functions

void zamianaNaDziesietny(int podstawa, int liczba, int reszta[])
{
    vector < int > cyfra;
    cout <<"\n";

    for(int a = reszta.size(); a > 0; a--)
    {
        cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
    }

    for(int a = 1; a < cyfra.size(); a++)
    {
        cyfra[0] += cyfra[a];
    }

    cout << cyfra[0];
}

void zamianaNaDziesietny(int podstawa, int liczba, int reszta[])
{
    vector < int > cyfra;
    cout <<"\n";

    for(int a = reszta.size(); a > 0; a--) //request for member 'size' in 'reszta', which is of non-class type 'int*'
    {
        cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
    }

    for(int a = 1; a < cyfra.size(); a++)
    {
        cyfra[0] += cyfra[a];
    }

    cout << cyfra[0];
}

//another unimportant part of code

int main()
{
     //unimportant stuff

    zamianaZDziesietnego(podstawa, liczba);
    zamianaNaDziesietny(podstawa, liczba, reszta);

    return 0;
}

我不知道如何在函数“zamiananaDziesietny”中使用向量“reszta”作为参数。 我应该输入什么来让这个程序编译?

我收到 2 个错误: 其中之一是: 'reszta' 未在此范围内声明

这是一个数组...哦,向量是一种数组...我想...我是菜鸟,所以我总是会出错。

我可以在 main 中处理这个向量,添加“cout

我不知道如何在函数中使用向量作为参数。

我得到的第二个错误是: 请求“reszta”中的成员“size”,它是非类类型“int*” 它在第 32 行。

所以这是我的问题。 我试过用几种不同的方式输入这个参数。

当我尝试: void zamianaNaDziesietny(int podstawa, int liczba, 矢量 reszta[])

第二个错误改为: 在'reszta'中请求成员'size',它是指针类型'std::vector*'(也许你打算使用'->'?)|

下面几行还出现了一个新错误:

'*(reszta + ((((sizetype)a) + -1u) * 12u)) * pow((double)podstawa, (double)(a + -1)) 中的 'operator*' 不匹配'|

嗯,我是个大菜鸟,我不知道如何解决这个问题。有人可以帮忙吗?

顺便说一句,如果有人感兴趣 - 我正在制作一个程序,将二进制数转换为十进制数,反之亦然。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    只需像这样声明参数:

    void zamianaNaDziesietny(int podstawa, int liczba, std::vector<int> reszta)
    {
        vector < int > cyfra;
        cout <<"\n";
    
        for(int a = reszta.size(); a > 0; a--)
        {
            cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
        }
    
        for(int a = 1; a < cyfra.size(); a++)
        {
            cyfra[0] += cyfra[a];
        }
    
         cout << cyfra[0];
    }
    

    或者更好的是,通过引用传递向量以避免它被复制:

    void zamianaNaDziesietny(int podstawa, int liczba, std::vector<int>& reszta)
    {
        vector < int > cyfra;
        cout <<"\n";
    
        for(int a = reszta.size(); a > 0; a--)
        {
            cyfra.push_back(reszta[a - 1] * pow(podstawa, a - 1));
        }
    
        for(int a = 1; a < cyfra.size(); a++)
        {
            cyfra[0] += cyfra[a];
        }
    
         cout << cyfra[0];
    }
    

    您所做的是使用 int 数组 (int reszta[]) 作为参数而不是向量 - 它们是不同的类型。

    【讨论】:

      【解决方案2】:

      向量与数组不同,因为向量是类并且可以调用它们的方法(例如.size()。数组来自 c,它实际上只是内存中的指针。按所述传递引用是最好的方法传入向量,但一定要小心修改。

      【讨论】:

      • 你能澄清一下'按规定传递地址'是什么意思吗?
      • 请注意,引用不是地址(尽管它可以编译为等价物,但您不应将其称为地址)
      猜你喜欢
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多