Size: a a a

2021 March 02

D

Dmitriy in supapro.cxx
Nastya Medveda
Что-то я выучила. Разница между  Definition и declaration это то, что люди, которые С++   знают, и то периодически путают.
Are you seriously?!
источник

q

qwerty in supapro.cxx
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;
   
   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport>(m_CurrEntities[i])) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
}


Ребят, подскажите плиз, что тут неверно написано?
Типа, у меня есть некоторые m_CurrEntities и из них нужно отобрать reports (DReport реализовывает интерфейс DEntitiesAbstraction)
Так вот, что не так с dynamic_cast-ом?
источник

MK

Mikhail Kornaukhov in supapro.cxx
qwerty
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;
   
   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport>(m_CurrEntities[i])) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
}


Ребят, подскажите плиз, что тут неверно написано?
Типа, у меня есть некоторые m_CurrEntities и из них нужно отобрать reports (DReport реализовывает интерфейс DEntitiesAbstraction)
Так вот, что не так с dynamic_cast-ом?
Compile error?
источник

MK

Mikhail Kornaukhov in supapro.cxx
qwerty
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;
   
   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport>(m_CurrEntities[i])) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
}


Ребят, подскажите плиз, что тут неверно написано?
Типа, у меня есть некоторые m_CurrEntities и из них нужно отобрать reports (DReport реализовывает интерфейс DEntitiesAbstraction)
Так вот, что не так с dynamic_cast-ом?
С телефона тяжело парсить, но кажется, ты объявляешь ссылку не инициализировав
источник

q

qwerty in supapro.cxx
да тут проблема в том, что нужно скастить unique_ptr, ладно, я еще погуглю, либо переделаю на shared, а там уже есть свой cast
источник

LA

Liber Azerate in supapro.cxx
qwerty
да тут проблема в том, что нужно скастить unique_ptr, ладно, я еще погуглю, либо переделаю на shared, а там уже есть свой cast
Не надо кастить юник, надо кастить указатель из юника
источник

q

qwerty in supapro.cxx
спасибо!
источник

q

qwerty in supapro.cxx
if (dynamic_cast<DReport*>(m_CurrEntities[i].get()))
источник

q

qwerty in supapro.cxx
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;

   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport*>(m_CurrEntities[i].get())) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
   return currReports;
}
Поправил, но все же выдает ошибку непонятную:
/usr/include/c++/9/ext/new_allocator.h:145:20: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = DEntitiesAbstraction; _Dp = std::default_delete<DEntitiesAbstraction>]’
источник

MK

Mikhail Kornaukhov in supapro.cxx
qwerty
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;

   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport*>(m_CurrEntities[i].get())) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
   return currReports;
}
Поправил, но все же выдает ошибку непонятную:
/usr/include/c++/9/ext/new_allocator.h:145:20: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = DEntitiesAbstraction; _Dp = std::default_delete<DEntitiesAbstraction>]’
Ты копируешь юник птр, а он не умеет копироваться
источник

LA

Liber Azerate in supapro.cxx
qwerty
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;

   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport*>(m_CurrEntities[i].get())) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
   return currReports;
}
Поправил, но все же выдает ошибку непонятную:
/usr/include/c++/9/ext/new_allocator.h:145:20: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = DEntitiesAbstraction; _Dp = std::default_delete<DEntitiesAbstraction>]’
И серьёзно, это у тебя не будет работать в принципе. Ты же объвляешь ссылку
источник

MK

Mikhail Kornaukhov in supapro.cxx
qwerty
const std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll() const {

   std::vector <std::unique_ptr<DEntitiesAbstraction>>& currReports;

   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport*>(m_CurrEntities[i].get())) {
           currReports.push_back(m_CurrEntities[i]);
       }
   }
   return currReports;
}
Поправил, но все же выдает ошибку непонятную:
/usr/include/c++/9/ext/new_allocator.h:145:20: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = DEntitiesAbstraction; _Dp = std::default_delete<DEntitiesAbstraction>]’
Попробуй в пушбеке мувать
источник

q

qwerty in supapro.cxx
Liber Azerate
И серьёзно, это у тебя не будет работать в принципе. Ты же объвляешь ссылку
да-да, спасибо, я просто уже 12ый час за компом, я хз, что вообще делаю...(
источник

q

qwerty in supapro.cxx
Mikhail Kornaukhov
Попробуй в пушбеке мувать
ну вот не совсем работает
источник

LA

Liber Azerate in supapro.cxx
qwerty
ну вот не совсем работает
Не может не работать
источник

q

qwerty in supapro.cxx
currReports.push_back(move(m_CurrEntities[i]));
источник

q

qwerty in supapro.cxx
вот так же или я опять?
источник

LA

Liber Azerate in supapro.cxx
qwerty
вот так же или я опять?
Так. Хотя, вероятно, std::move
источник

q

qwerty in supapro.cxx
не(
источник

q

qwerty in supapro.cxx
std::vector <std::unique_ptr<DEntitiesAbstraction>>& DReportRepository::GetAll()  {

   std::vector <std::unique_ptr<DEntitiesAbstraction>> currReports;

   for (std::size_t i = 0; i < m_CurrEntities.size(); i++) {
       if (dynamic_cast<DReport*>(m_CurrEntities[i].get())) {
           currReports.push_back(std::move(m_CurrEntities[i]));
       }
   }
   return currReports;
}
Ну в общем, я убрал консты с обеих сторон, теперь получил какую-то непонятную кашу, связанную уже с сами кастованием
error: cannot dynamic_cast ‘(&((DReportRepository*)this)->DReportRepository::<anonymous>.DRepositoriesAbstraction::m_CurrEntities.std::vector<std::unique_ptr<DEntitiesAbstraction> >::operator[](i))->std::unique_ptr<DEntitiesAbstraction>::get()’ (of type ‘using pointer = using pointer = using type = class DEntitiesAbstraction*’ {aka ‘class DEntitiesAbstraction*’}) to type ‘class DReport*’ (source type is not polymorphic)
  17 |         if (dynamic_cast<DReport*>(m_CurrEntities[i].get())) {
источник