Size: a a a

2021 March 02

LA

Liber Azerate in supapro.cxx
qwerty
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())) {
Начну с того, что у тебя каша с тем, что ты возвращаешь ссылку на локальный объект
источник

LA

Liber Azerate in supapro.cxx
qwerty
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())) {
Потому что динамик каст для полиморфных иерархий, о чём тебе текст ошибки и говорит
источник

q

qwerty in supapro.cxx
еще бы понять, почему он так выражается:
class DEntitiesAbstraction
{
protected:
   std::size_t m_EntityID;
public:
   DEntitiesAbstraction();
   ~DEntitiesAbstraction();
   
};


class DReport : public DEntitiesAbstraction
{
private:
   std::size_t m_ReportID;
   
   time_t m_CreatedTime;
   std::vector<std::size_t> m_FinishedTasksID;
   std::size_t m_AuthorID;
   std::string_view m_Comment;

public:
   DReport();
   ~DReport();
};
источник

FS

Flower Surgeon in supapro.cxx
Забыл добавить, что dynamic_cast — зло
источник

LA

Liber Azerate in supapro.cxx
qwerty
еще бы понять, почему он так выражается:
class DEntitiesAbstraction
{
protected:
   std::size_t m_EntityID;
public:
   DEntitiesAbstraction();
   ~DEntitiesAbstraction();
   
};


class DReport : public DEntitiesAbstraction
{
private:
   std::size_t m_ReportID;
   
   time_t m_CreatedTime;
   std::vector<std::size_t> m_FinishedTasksID;
   std::size_t m_AuthorID;
   std::string_view m_Comment;

public:
   DReport();
   ~DReport();
};
А где ты видишь здесь полиморфизм?
источник

LA

Liber Azerate in supapro.cxx
У тебя здесь очевидно забыт как минимум виртуальный деструктор
источник

LA

Liber Azerate in supapro.cxx
qwerty
еще бы понять, почему он так выражается:
class DEntitiesAbstraction
{
protected:
   std::size_t m_EntityID;
public:
   DEntitiesAbstraction();
   ~DEntitiesAbstraction();
   
};


class DReport : public DEntitiesAbstraction
{
private:
   std::size_t m_ReportID;
   
   time_t m_CreatedTime;
   std::vector<std::size_t> m_FinishedTasksID;
   std::size_t m_AuthorID;
   std::string_view m_Comment;

public:
   DReport();
   ~DReport();
};
Я видел тебя пару раз, ты вроде нормальный человек, проспался бы, а не тыкался сейчас в эти ошибки
источник

q

qwerty in supapro.cxx
Liber Azerate
У тебя здесь очевидно забыт как минимум виртуальный деструктор
да, я поправил) Да сорри за флуд в чат
источник

LA

Liber Azerate in supapro.cxx
qwerty
да, я поправил) Да сорри за флуд в чат
Это не флуд :)
источник

q

qwerty in supapro.cxx
Liber Azerate
Я видел тебя пару раз, ты вроде нормальный человек, проспался бы, а не тыкался сейчас в эти ошибки
осталось понять, где ты мог меня увидеть, ну лан, мб, в коворкинге, где-нить
источник

LA

Liber Azerate in supapro.cxx
qwerty
осталось понять, где ты мог меня увидеть, ну лан, мб, в коворкинге, где-нить
В местной сети чатов
источник

t

text in supapro.cxx
qwerty
осталось понять, где ты мог меня увидеть, ну лан, мб, в коворкинге, где-нить
привет красноглазик узнал тебя по вопросам в 4 утра
источник

q

qwerty in supapro.cxx
ахахаххаххахахахахаха
источник

t

text in supapro.cxx
да я сам только проснулся
источник

t

text in supapro.cxx
сечас начну тоже
источник

ПК

Побитый Кирпич... in supapro.cxx
Flower Surgeon
Вкрации: чтобы не писАть много перегрузок операторов: написал один раз космический кораблик и усё.
Не только, ещё для трёхстороннего сравнения как в нормальных языках)
источник

CD

Constantine Drozdov in supapro.cxx
Побитый Кирпич
Не только, ещё для трёхстороннего сравнения как в нормальных языках)
Ответа про lexicographical compare в чате так и не было :)
источник

CD

Constantine Drozdov in supapro.cxx
Nastya Medveda
declaration - уведомление компилятора, что объект (функция или переменная) появится позже в коде и нужна чтоб он не ругался на undefined объект.
definition - выделение памяти под объект, но при этом не предполагает использования, так как  в памяти может быть мусор.
initialization запись в память значения объекта (после этого в памяти не мусор)

Я все  определения перечислила или там еще какие-то остались?
Опять же есть достаточно бытовое восприятие. Объявление необходимо для косвенной работы (сослаться на), определение для прямой. Правда, будут не совсем очевидности, скажем для записи переменной нужно определение типа и объявление переменной.
источник

FS

Flower Surgeon in supapro.cxx
Побитый Кирпич
Не только, ещё для трёхстороннего сравнения как в нормальных языках)
Это в каких? 🧐
источник

IZ

Ilia Zviagin in supapro.cxx
Nastya Medveda
Я нашла пару видосов, где мужик пишет мелкие учебные программы на С++, но он использует консольный буфер и виндовую библиотеку Windows.h>/
#include <iostream>
#include <Windows.h>

int nScreenWidth = 120;
int nScreenHeight = 30;

int main(int argc, const char * argv[]) {
   // Create Screen Buffer
   wchar_t *screen = new wchar_t[nScreenWidth*nScreenHeight];
   for (int i = 0; i < nScreenWidth*nScreenHeight; i++) screen[i] = L' ';
   HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
   SetConsoleActiveScreenBuffer(hConsole);
   DWORD dwBytesWritten = 0;
   
   return 0;
}

https://github.com/OneLoneCoder/videos/blob/master/OneLoneCoder_Snake.cpp

как этот консольный буфер заставить работать под Mac/Linux?
Никак, это win API, в Linux есть ncurses, но тогда эти элементы API побоку...
источник