push_back приватные векторы с 2 методами, один не работает - PullRequest
1 голос
/ 15 июня 2010

У меня есть класс с частным вектором двойных чисел.Чтобы получить доступ к этим значениям или изменить их, сначала я использовал такие методы, как

void classA::pushVector(double i)
{
this->vector.push_back(i);
}
double classA::getVector(int i)
{
return vector[i];
}

. Это работало некоторое время, пока не обнаружил, что мне придется перегружать множество операторов для того, что мне нужно, поэтому я попытался изменитьэто получить и установить вектор непосредственно вместо значений, то есть

void classA::setVector(vector<double> vector)
{
this->vector = vector;
}
vector<double> classA::getVector()
{
return vector;
}

Теперь, скажем, есть classB, который имеет частный элемент classA, который также имеет методы get и set для чтения и записи.Проблема заключалась в том, что я пытался отодвинуть значение к конечному вектору в классе A.

void classB::setFirstValue(double first)
{
this->getClassA().getVector().push_back(first);
}

Это абсолютно ничего не значит для вектора.Это остается неизменным, и я не могу понять, почему ... Есть идеи?

Ответы [ 2 ]

3 голосов
/ 15 июня 2010

Вы возвращаете вектор по значению в вашем getVector ().Это означает, что при вызове «this-> getClassA (). GetVector (). Push_back (first);» вы копируете вектор, а затем помещаете элемент в копию.Затем копия немедленно сбрасывается.

Чтобы заставить ее работать так, как вы хотите, вам нужно вернуть вектор по ссылке.Ваш метод будет выглядеть так:

"vector & classA :: getVector ()"

2 голосов
/ 15 июня 2010

В этом методе:

void classA::setVector(vector<double> vector)
{
this->vector = vector;
}

вы передаете копию вектора.Чтобы передать фактический вектор, вам нужна ссылка:

void classA::setVector(vector<double> & vector)
{
this->vector = &vector;
}

, а переменная вектора в вашем классе должна быть указателем.

Все это выглядит довольно нежелательно для меня - я бы переосмыслил, что на самом деле делает ваш класс.Для класса гораздо более разумно управлять вектором, чем поддерживать указатель на него вне класса.и если вам нужно повторно реализовать все методы класса, возможно, вам вообще не нужен класс, а только вектор.

...