Вы создаете указатель p на класс Planes, но никогда не инициализируете его. Вам нужно использовать ключевое слово new для создания нового объекта класса Planes и присвоить его адрес p *
planes *p = new planes();
Кроме того, если вы не предоставили конструктор для фактической инициализации векторного объекта в классе плоскостей, компилятор вызовет конструктор по умолчанию, который инициализирует векторный объект до размера 0. Имейте в виду, что вам придется использовать ключевое слово delete, чтобы освободить динамически выделенную память для указателя обратно в свободное хранилище, когда оно выйдет из Объем.
Еще одна вещь, которую вы можете сделать (при условии, что у вас уже есть объект плоскости, инициализированный где-то еще), передать вектор planeList непосредственно вашей функции следующим образом:
//Function declaration and definition
void addFlight(vector<planes*> p)
{}
//function call
addFlight(p.planeList);
, а затем использовать этот вектор для доступа к данным. , Вы также можете передать вектор по ссылке, если хотите изменить его данные.
@@IDENTITY
возвращает новые идентификационные данные, сгенерированные на текущей сессии. В большинстве случаев Вы, вероятно, захотите использовать SCOPE_IDENTITY
вместо этого, который возвращает новые идентификационные данные, сгенерированные в текущей области.
Например, если Вы вставляете строку в table1, но которые вставляют, запускает триггер, который вставляет строку в table2, затем @@IDENTITY
возвратит идентификационные данные из table2 тогда как SCOPE_IDENTITY
возвратит идентификационные данные из table1.
INSERT INTO my_table (my_column) VALUES ('test')
-- return the identity of the row you just inserted into my_table
-- regardless of any other inserts made by triggers etc
SELECT SCOPE_IDENTITY() AS ins_id
Нет; это работает во многом как ИЗБРАННЫЙ LAST_INSERT_ID () в mysql, получая последнее вставленное значение идентификационных данных. Можно хотеть смотреть на это всестороннее исследование для больше на том, чем Вы могли бы хотеть быть обеспокоенными с ним.