favor, eche un vistazo a este ejemplo:C++ puntero del vector de problema/referencia
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class mySubContainer
{
public:
string val;
};
class myMainContainer
{
public:
mySubContainer sub;
};
void doSomethingWith(myMainContainer &container)
{
container.sub.val = "I was modified";
}
int main()
{
vector<myMainContainer> vec;
/**
* Add test data
*/
myMainContainer tempInst;
tempInst.sub.val = "foo";
vec.push_back(tempInst);
tempInst.sub.val = "bar";
vec.push_back(tempInst);
// 1000 lines of random code here
int i;
int size = vec.size();
myMainContainer current;
for(i = 0; i < size; i ++)
{
cout << i << ": Value before='" << vec.at(i).sub.val << "'" << endl;
current = vec.at(i);
doSomethingWith(current);
cout << i << ": Value after='" << vec.at(i).sub.val << "'" << endl;
}
system("pause");//i suck
}
Muchas infierno de código para un ejemplo, lo sé.
Ahora por lo que no tiene que pasar años pensando en lo que esto [debería] hacer [en]: Tengo una clase myMainContainer
que tiene como único miembro de una instancia de mySubContainer
. mySubContainer
solo tiene una cadena val
como miembro.
Así que creo un vector y lo lleno con algunos datos de muestra.
Ahora, lo que quiero hacer es: iterar a través del vector y hacer una función separada capaz de modificar el myMainContainer actual en el vector. Sin embargo, el vector se mantiene sin cambios como la salida dice:
0: Value before='foo'
0: Value after='foo'
1: Value before='bar'
1: Value after='bar'
- ¿Qué estoy haciendo mal?
doSomethingWith tiene que volverá vacía, no puedo dejar que se devuelva el myMainContainer
modificado y luego simplemente sobrescribir en el vector, por eso traté de pasarlo por referencia como se ve en la definición doSomethingWith anteriormente.