Указатели C++. Как присвоить значение структуре указателя?

У меня есть следующая структура:

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

Тогда я создаю указатель автомобиля типа

car *tempCar;

Как я присваиваю значения tempCar? Я испытываю затруднения

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

Компилятор продолжает говорить, что tempCar имеет тип car*. Я не уверен, что я делаю неправильно

17
задан user69514 24 February 2010 в 21:14
поделиться

5 ответов

Вам нужно использовать оператор -> для указателей, например:

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

Кроме того, не забудьте выделить память для tempCar, если вы используете такой указатель. Вот что делают «новое» и «удаление».

28
ответ дан 30 November 2019 в 11:08
поделиться

tempCar-> vin = 1234

Объяснение довольно простое: car * - указатель на car . Это означает, что вам нужно использовать оператор -> для доступа к данным. Кстати, автомобиль * должен быть выделен, если вы хотите его использовать.

Другое решение - использовать объявление, например car tempCar; . Структура car теперь находится в стеке, вы можете использовать ее, пока находитесь в этой области. С таким объявлением вы можете использовать tempCar.vin для доступа к данным.

5
ответ дан 30 November 2019 в 11:08
поделиться

Ваш tempCar является указателем, тогда вам нужно выделить для него память и назначить его следующим образом:

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

В противном случае объявите tempCar следующим образом: car tempCar;

1
ответ дан 30 November 2019 в 11:08
поделиться

Люди, будьте осторожны при использовании new, это не Java, это C++, не используйте круглые скобки, когда у вас нет параметров: tempCar = new car;

-2
ответ дан 30 November 2019 в 11:08
поделиться

Вы должны сначала разыменовать указатель (чтобы получить структуру).

Либо:

(*tempCar).make = "GM";

Или:

tempCar->make = "GM";
13
ответ дан 30 November 2019 в 11:08
поделиться