C ++函数不会改变我的参数 [英] C++ function doesn't change my argument

查看:128
本文介绍了C ++函数不会改变我的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近开始用Cpp编程,遇到了一个我无法解决的问题,也没有找到合适的答案。

I've recently started programming in Cpp and I came across an issue I couldn't resolve nor find myself an appropriate answer.

我感兴趣的是为什么,当我传递一个函数(fillInArray函数)
的参数时,它不会改变任何东西。在调试器中,我发现vectorArray(我想要传递的参数)根本不会改变,但是在这个函数里面的向量回推方法似乎有效,它会增加向量大小。
任何帮助将不胜感激,因为这个问题拒绝我继续这个程序。

I,m interested why, when I pass and argument to a function (fillInArray function) it doesn't change anything. When in debugger I found out that vectorArray (argument I wanted to pass) doesn't change at all, but pushback method on vector inside this function seems to work, it increments vector size. Any help would be greatly appreciated since this problem denies me from moving on with this program.

header.h

#pragma once
#include<iostream>
#include<string>
#include<vector>

using namespace std;

class header
{

private:
    int numberOfBytes = NULL;
    int number;
    int argument;
    vector<int> vectorArray;
    //std::vector<int> vector2;
    //std::vector<int> vector3;

public:

    header();
    ~header();
    void setBytes(int bytes);
    int getBytes();
    void askForBytes();
    void fillInArray(vector<int> someVector);
    void showArray();
    void negateBytes();
    void menu();
    void addArrays();
    void substractArray();
};

header.cpp

header.cpp

#include "header.h"


header::header()
{
    askForBytes();
    setBytes(number);
    fillInArray(vectorArray);
    //fillInArray(vector2);
    showArray();
    negateBytes();
    showArray();
}


header::~header()
{
}


void header::setBytes(int bytes)
{
    if (bytes % 8 == 0)
    {
        numberOfBytes = bytes;
        cout << "You typed in: " << numberOfBytes << " bytes\n";
    }
    else
        cout << "Wrong argument, number of bytes set to: " << 
        numberOfBytes << " bytes" << endl;

}

void header::askForBytes()
{
    cout << "Plz type in how many bytes: " << endl;
        cin >> number;
}

int header::getBytes()
{
    return numberOfBytes;
}

void header::fillInArray(vector<int> vector)
{
    for (int i = 0; i < numberOfBytes; i++)
    {
        vector.push_back( rand() % 2);
    }

}

void header::showArray()
{
    for (unsigned int i = 0; i < vectorArray.size(); i++)
    {
        cout << vectorArray[i] << "  ";
    }
    cout << endl;
}

void header::negateBytes()
{
    for (int i = 0; i < numberOfBytes; i++)
    {
        if (vectorArray[i] == 0)
            vectorArray[i] = 1;
        else
            vectorArray[i] = 0;
    }
}

/*void header::menu()
{
    cout << "Type argument to do stuff: " << endl << 
        "1 to negate single vector\n 2 to add two vectors\n 3 to minus two vectors\n";
    cin >> argument;
    switch (argument)
    {
    case 1: negateBytes();
        showArray(vector);
        break;
    case 2: addArrays();
        showArray(vector);
        break;
    case 3: substractArray();
        showArray(vector);
        break;
    default: cout << "Wrong argument";
    }
}*/

void header::addArrays()
{
    for (int i = 0; i < getBytes(); i++)
    {
        //if ((vector[i] && vector2[i]) == 1)
        //  vector3.push_back(0);
    //  else if ((vector[i] == 1 && vector2[i] == 0) || (vector[i] == 0 && vector2[i] == 1))
        //  vector3.push_back(1);
    //  else vector3.push_back(0);
    }
}

void header::substractArray()
{
}



zadanie1.cpp = main.cpp

zadanie1.cpp = main.cpp

#include "header.h"

void showText()
{
    cout << "text";
}

int main()
{
    header head;

    system("Pause");
    return 0;
}

我还评论了一些变量和函数,我将在稍后创建上。
在此先感谢!

I've also commented out some variables and functions that I will be building later on. Thanks in advance!

推荐答案

void fillInArray(vector<int> someVector);

您的函数通过值获取一个向量。这意味着该函数获取您传递给它的向量的一个副本。它可以在该副本上运行,但这些更改在外部不可见。

Your function takes a vector by value. This means the function gets a copy of the vector you pass to it. It can operate on that copy, but those changes aren't visible outside.

如果您希望该函数能够修改调用方的向量,则应该传递一个引用:

You should be passing a reference if you want that function to be able to modify the caller's vector:

void fillInArray(vector<int>& someVector);

(需要在函数定义中做相同的修改。)

(Same change needs to be made in the function definition.)

这篇关于C ++函数不会改变我的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆