J'ai un scénario dans lequel j'utilise souvent des variables sans pointeur, y compris des objets. Je veux définir ces variables à un ensemble de données existant à partir d'un tableau, mais je ne veux pas de copie électronique, mais plutôt que la variable sans pointeur pointe directement vers l'adresse mémoire de l'autre variable.Passer une variable non-pointeur dans la fonction comme une référence au pointeur
Ceci est un simple exemple de code pour mon dilemme.
struct User
{
unsigned int ID;
std::string Name;
User(int id, std::string name)
{
ID = id;
Name = name;
}
};
User data[] =
{
User(2, "Jane Smith"),
};
void ChangeUser(User& user)
{
user = data[0];
}
int main()
{
User first;
ChangeUser(first);
return 0;
}
Si je veux une fonction qui peut changer à une nouvelle adresse, je peux passer l'objet non-pointeur comme un pointeur vers un objet. Cependant, cela ne change pas la variable en dehors de la fonction, car elle passe dans le pointeur par la valeur. Ce que je peux faire est de passer un pointeur par référence, ce qui signifie que si je passe dans un pointeur, les données seront modifiées même après la fonction. Cependant, si j'essaye avec une variable sans pointeur, j'obtiens cette erreur de compilation où j'appelle la fonction.
error C2664: 'void ChangeUser(User *&)' : cannot convert argument 1 from 'User *' to 'User *&'
Si je crée une variable de pointeur comme ci-dessous, le compilateur acceptera et définira les données du pointeur sur le pointeur de membre dans le tableau.
Cependant, si je dois utiliser des variables sans pointeur, y a-t-il un moyen pour moi d'accomplir la même tâche? Idéalement, je veux pouvoir garder une variable User en tant que membre d'une classe, donc les variables de référence locales ne peuvent pas être utilisées.
"Toutefois, si j'essaie avec une variable sans pointeur, j'obtiens cette erreur de compilation où j'appelle la fonction." S'il vous plaît code postal menant à cette erreur ... – jpo38
@ jpo38 Ils l'ont fait. – user0042
"* Je souhaite que la variable sans pointeur pointe directement sur l'adresse mémoire de l'autre variable. *" Cela semble plutôt impossible. – juanchopanza