отодвигая объект класса в вектор

У меня есть вектор, который принимает объект класса, но когда я пытаюсь отодвинуть созданный мной объект в вектор, я получаю эти проблемы и не знаю, как его обойти. Кто-нибудь может мне помочь ?

    void populate( std::vector<NV*> vNav, NV *nVess);

создание класса объекта

    NV vPB;

Переменные класса объекта совпадают

    vPB.name = namE;
vPB.type = typE;
vPB.length = lengtH;
vPB.speed = speeD;
vPB.range = rangE;
vPB.serialNum = serialNuM;
vPB.serialNum = beaM;
vPB.displacement = displacemenT;
vPB.draft = drafT;
vPB.isActive = isActivE;

namE = name;
typE = type;
lengtH = length;
speeD = speed;
rangE = range;
serialNuM = serialNum;
beaM = beam;
displacemenT = displacement;
drafT = draft;
isActivE = isActive;

vNav.push_back(vPB);

постоянно получаю сообщение об ошибке C2664: невозможно преобразовать параметр 1 из ‘N_V :: NV’ в ‘N_V :: NV *&&’

а также постоянно получаю ошибку IntelliSence без экземпляра функции перегрузки

0

Решение

Вектор ожидает указатель на объект, тогда как vPB, который вы отбрасываете назад, является не указателем на объект, а скорее самим объектом.

Минимум, который вы можете сделать, чтобы это исправить:

 NV* vPB = new NV();
vPB->name = namE;
... and similarly for all the members you need to initialize ...
vNav.push_back(vPB);

Во-вторых, вектор vNav будет существовать только в контексте этой функции, потому что он передается по значению. Вы, вероятно, хотите взять аргумент по ссылке. Это означает изменение подписи вашей функции на:

void populate( std::vector<NV*>& vNav, NV *nVess);

Наконец, не рекомендуется использовать голые указатели, если вы можете помочь. Попробуйте взглянуть на shared_ptr и unique_ptr как на более сложный шаг, чтобы убедиться, что время жизни объекта правильно управляется, и вы не теряете выделение памяти.

2

Другие решения

vNav объявлен как std::vector<NV*>, но вы пытаетесь подтолкнуть NV введите туда, объект не указатель. Так что это несоответствие типов. Вы также передаете вектор по значению, которое, вероятно, не предназначено.

Использование вектора указателей будет довольно проблематичным. Потому что вам нужно вручную выделить место для объектов, а затем не забудьте выделить их. Я бы посоветовал пересмотреть код для использования std::vector<NV> или хотя бы почитайте про умные указатели.

0

Как отмечали другие, вы пытаетесь вставить объект, где тип должен быть указателем объекта. Другая ошибка — вы передаете вектор по значению, он должен быть по ссылке, в противном случае вызывающая сторона не увидит эффекта вставки.

          void populate( std::vector<NV*>& vNav, NV *nVess);
0

Я бы написал твой populate функционировать как

void populate( std::vector<NV>& vNav, NV& nVess);

если вы не хотите добавлять указатели на объекты внутри вектора.
И не ясно, где вы получаете эту ошибку. Можете ли вы опубликовать код, где вы получите ошибку? Это в push_back? Если да, то это потому, что вы пытаетесь отодвинуть объект назад, но ваш вектор ожидает указатель на объект.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector