La función no cambia el puntero pasado C ++

Tengo mi función y estoy llenando targetBubble allí, pero no está lleno después de llamar a esta función, pero sé que se completó en esta función porque tengo el código de salida.

 bool clickOnBubble(sf::Vector2i & mousePos, std::vector bubbles, Bubble * targetBubble) { targetBubble = bubbles[i]; } 

Y paso el puntero así

 Bubble * targetBubble = NULL; clickOnBubble(mousePos, bubbles, targetBubble); 

Por qué no funciona, por favor? Gracias

Porque está pasando una copia del puntero. Para cambiar el puntero necesitas algo como esto:

 void foo(int **ptr) //pointer to pointer { *ptr = new int[10]; //just for example, use RAII in a real world } 

o

 void bar(int *& ptr) //reference to pointer (a bit confusing look) { ptr = new int[10]; } 

Está pasando el puntero por valor.

Pase una referencia al puntero si desea que se actualice.

 bool clickOnBubble(sf::Vector2i& mousePos, std::vector bubbles, Bubble *& t) 

Si tú escribes

 int b = 0; foo(b); int foo(int a) { a = 1; } 

usted no cambia ‘b’ porque a es una copia de b

si quieres cambiar b, necesitarías pasar la dirección de b

 int b = 0; foo(&b); int foo(int *a) { *a = 1; } 

lo mismo ocurre con los punteros:

 int* b = 0; foo(b); int foo(int* a) { a = malloc(10); // here you are just changing // what the copy of b is pointing to, // not what b is pointing to } 

para cambiar donde b señala para pasar la dirección:

 int* b = 0; foo(&b); int foo(int** a) { *a = 1; // here you changing what b is pointing to } 

hth

No puede cambiar el puntero a menos que lo pase por referencia (no const) o como un doble puntero. Pasar por valor hace una copia del objeto y cualquier cambio en el objeto se realiza en la copia, no en el objeto. Puede cambiar el objeto al que apunta el puntero, pero no el puntero si pasa por valor.

Lea esta pregunta para ayudar a entender las diferencias en más detalle ¿ Cuándo pasar por referencia y cuándo pasar por el puntero en C ++?