Указатели С++. Как назначить значение структуре указателя?
У меня есть следующая структура:
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 имеет тип автомобиля *. Я не уверен, что я делаю неправильно.
Ответы
Ответ 1
Вам нужно использовать оператор → для указателей, например:
car * tempCar = new car();
tempCar->vin = 1234;
tempCar->make = "GM";
//...
delete tempCar;
Кроме того, не забудьте выделить память для tempCar, если вы используете такой указатель. Это то, что делают "новое" и "удаление".
Ответ 2
Вы должны сначала разыменовать указатель (чтобы получить структуру).
Либо:
(*tempCar).make = "GM";
Или:
tempCar->make = "GM";
Ответ 3
tempCar->vin = 1234
Объяснение довольно просто: car*
- указатель на car
. Это означает, что вы должны использовать оператор ->
для доступа к данным. Кстати, car*
должен быть выделен, если вы хотите его использовать.
Другим решением является использование объявления типа car tempCar;
. Структура car
теперь находится в стеке, которую вы можете использовать, если вы находитесь в этой области. С помощью такого объявления вы можете использовать tempCar.vin
для доступа к данным.
Ответ 4
Ваш tempCar - это указатель, тогда вам нужно выделить для него память и назначить так:
tempCar = new car();
tempCar->vin = 1234;
tempCar->make = "GM";
tempCar->year = 1999;
tempCar->fee = 20.5;
В противном случае объявите tempCar следующим образом: car tempCar;
Ответ 5
Измените температуру автомобиля * ниже:
car *tempCar = (car *)malloc(sizeof(car));
tempCar->vin = 1234;
tempCar->make = "GM";
tempCar->year = 1999;
tempCar->fee = 20.5;
Ответ 6
Люди, будьте осторожны при использовании новых, это не Java, это С++, не используйте круглые скобки, когда у вас нет параметров: tempCar = new car;