Я недавно начал программировать в Cpp, и я столкнулся с проблемой, которую я не мог решить, и не нашел подходящего ответа.Функция C++ не меняет мой аргумент
Я интересуюсь, почему, когда я передаю и аргумент функции (функция fillInArray) ничего не меняет. Когда в отладчике я обнаружил, что vectorArray (аргумент, который я хотел передать), вообще не изменяется, но метод pushback на векторе внутри этой функции, похоже, работает, он увеличивает размер вектора. Любая помощь будет принята с благодарностью, поскольку эта проблема не позволяет мне перейти к этой программе.
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
#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
#include "header.h"
void showText()
{
cout << "text";
}
int main()
{
header head;
system("Pause");
return 0;
}
Я также прокомментировал некоторые переменные и функции, которые я будет строиться позже. Спасибо заранее!
Использовать ссылочный параметр 'void fillInArray (вектор & someVector);' –
Вы заполняете копию 'vector' каждый раз, когда вы используете' fillInArray'. Вот почему вы должны передать его по ссылке. – wowofbob
спасибо большое, это сработало для меня! – TheGalax