J'ai ma fonction et je remplis targetBubble
là, mais elle n'est pas remplie après avoir appelé cette fonction, mais je sais qu'elle a été remplie dans cette fonction parce que j'ai là du code de sortie.
bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
targetBubble = bubbles[i];
}
Et je passe le pointeur comme ça
Bubble * targetBubble = NULL;
clickOnBubble(mousePos, bubbles, targetBubble);
Pourquoi ça ne marche pas s'il vous plait? Merci
Parce que vous passez une copie du pointeur. Pour changer le pointeur, vous avez besoin de quelque chose comme ceci:
void foo(int **ptr) //pointer to pointer
{
*ptr = new int[10]; //just for example, use RAII in a real world
}
ou
void bar(int *& ptr) //reference to pointer (a bit confusing look)
{
ptr = new int[10];
}
Vous passez le pointeur par valeur.
Passez un référence au pointeur si vous voulez le mettre à jour.
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
si tu écris
int b = 0;
foo(b);
int foo(int a)
{
a = 1;
}
vous ne changez pas "b" car a est une copie de b
si vous voulez changer b, vous devrez passer l'adresse de b
int b = 0;
foo(&b);
int foo(int *a)
{
*a = 1;
}
il en va de même pour les pointeurs:
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
}
pour changer où b pointe pour passer l'adresse:
int* b = 0;
foo(&b);
int foo(int** a)
{
*a = 1; // here you changing what b is pointing to
}
hth
Vous ne pouvez pas changer le pointeur à moins de le passer par une référence (non constante) ou comme un double pointeur. Le passage par valeur crée une copie de l'objet et toutes les modifications apportées à l'objet sont apportées à la copie, pas à l'objet. Vous pouvez modifier l'objet vers lequel pointe le pointeur, mais pas le pointeur lui-même si vous passez par valeur.
Lisez cette question pour mieux comprendre les différences plus en détail quand passer par référence et quand passer par pointeur en C++?