C ++ Указатели. Как присвоить значение структуре указателя? - PullRequest
17 голосов
/ 25 февраля 2010

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

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

Затем я создаю указатель типа car

car *tempCar;

Как назначить значения для tempCar? У меня проблемы

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

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

Ответы [ 6 ]

27 голосов
/ 25 февраля 2010

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

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

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

13 голосов
/ 25 февраля 2010

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

Либо:

(*tempCar).make = "GM";

Или:

tempCar->make = "GM";
5 голосов
/ 25 февраля 2010

tempCar->vin = 1234

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

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

1 голос
/ 25 февраля 2010

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

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

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

0 голосов
/ 15 августа 2016

Измените свой автомобиль * температура ниже строки:

 car *tempCar = (car *)malloc(sizeof(car));

 tempCar->vin = 1234;         
 tempCar->make = "GM";
 tempCar->year = 1999;
 tempCar->fee = 20.5;
0 голосов
/ 25 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...