web-dev-qa-db-fra.com

Pointeurs C ++. Comment attribuer une valeur à une structure de pointeur?

J'ai la structure suivante:

typedef struct{
    int vin;
    char* make;
    char* model;
    int year;
    double fee;
}car;

Puis je crée un pointeur de type voiture

car *tempCar;

Comment attribuer des valeurs au tempCar? J'ai des problèmes

        tempCar.vin = 1234;         
        tempCar.make = "GM";
        tempCar.year = 1999;
        tempCar.fee = 20.5;

Le compilateur n'arrête pas de dire que tempCar est de type car *. Je ne sais pas ce que je fais de mal

17
user69514

Vous devez utiliser l'opérateur -> sur les pointeurs, comme ceci:

car * tempCar = new car();
tempCar->vin = 1234;
tempCar->make = "GM";
//...
delete tempCar;

N'oubliez pas non plus d'allouer de la mémoire pour tempCar si vous utilisez un pointeur comme celui-ci. C'est ce que font "nouveau" et "supprimer".

28
Aric TenEyck

Vous devez d'abord déréférencer le pointeur (pour obtenir la structure).

Soit:

(*tempCar).make = "GM";

Ou:

tempCar->make = "GM";
13
Seth

tempCar->vin = 1234

L'explication est assez simple: car* est un pointeur sur car. Cela signifie que vous devez utiliser l'opérateur -> pour accéder aux données. Au fait, car* doit être alloué si vous souhaitez l'utiliser.

L'autre solution consiste à utiliser une déclaration telle que car tempCar;. La structure car est maintenant sur la pile, vous pouvez l'utiliser tant que vous êtes dans cette portée. Avec ce type de déclaration, vous pouvez utiliser tempCar.vin pour accéder aux données.

5
Nicolas Guillaume

Votre tempCar est un pointeur, alors vous devez lui allouer de la mémoire et l'affecter comme ceci:

tempCar = new car();
tempCar->vin = 1234;         
tempCar->make = "GM";
tempCar->year = 1999;
tempCar->fee = 20.5;

Sinon, déclarez tempCar de cette manière: car tempCar;

1
coelhudo