• Почему не вызвать конструктор с производным классом в аргументе?

    @sddvxd Автор вопроса
    Человек оставил ответ, но почему-то удалил

    Проблема была в explicit. Компилятору все равно, что я передаю объект базового класса

    SimpleItemSelectionModel::SimpleItemSelectionModel(QObject *parent) : QItemSelectionModel (dynamic_cast<QAbstractItemModel*>(parent))
    Ответ написан
  • Почему в виджете QTabWidget не показывает список строк в виджете QListView?

    @sddvxd Автор вопроса
    Затупил конкретно... При выходе из конструктора класса все члены, которые не являются членами класса удаляются... Объявил членами класса и присвоил указатели - все работает
    Ответ написан
    Комментировать
  • Как лучше и быстрее выучить C#?

    @sddvxd
    Тут для начала важно понять, что современные языки проектировали не с целью запутать обывателей, а делалось это все от и для людей. Поэтому любая сложность оправдывается экономией времени и ресурсов в будущем. Для начала решите для себя, для чего вам вообще этот язык, если "просто так", то будет крайне сложно, возможно даже невозможно изучить. Необязательно учить современные языки, не зная, для чего они будут вам нужны, лучше выберите направление и двигайтесь в нем. Не нужно выбирать инструмент, если вы не будете строить дом. Языки не сильно отличаются, поэтому изучив языки в интересующем вас направлении, можно с легкостью освоить нужный для вас язык в учебе, например. Не совершайте типичную ошибку новичков
    Ответ написан
    Комментировать
  • Как "обрезать" часть массива LPCWSTR?

    @sddvxd Автор вопроса
    Решил проблему:

    wchar_t *subwstr(const wchar_t *str, size_t startPos, size_t len)
    {
        wchar_t* temp = new wchar_t[wcslen(str)+100];
        wmemcpy(temp, str, 100);
        temp[startPos + len] = '\0';
        return temp + startPos;
    }
    const wchar_t* subw = subwstr((LPCWSTR)ObjectAttributes->ObjectName->Buffer, 4, wcslen((LPCWSTR)ObjectAttributes->ObjectName->Buffer));
    Ответ написан
  • Как правильно создать Copy Constructor для Class Queue and Double List?

    @sddvxd
    Явные конструкторы копирования объявляются лишь в тех случаях, когда функционала неявного недостаточно, то-есть, например, Queue динамически выделяет память:

    class Queue{ 
    public:
        char * name;
        Queue(const * char ch){
            name = new char[strlen(ch)+1];
            memcpy(name, ch, strlen(ch)+1); 
        };
        ~Queue(){
            delete [] name;
        };
    }


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

    Queue * q1 = new Queue("test");
    Queue q2(*q1);
    delete q1;
    std::cout<<q2.name; //Утечка памяти


    Давайте же сделаем правильно:
    Queue::Queue(const Queue & rq){
        delete [] name;
        name = new char[strlen(rq)+1];
        memcpy(name,rq,strlen(rq)+1);
    }
    Queue & Queue::operator=(const Queue & rq){
        if(this==&rq)return *this;
        delete [] name;
        name = new char[strlen(rq)+1];
        memcpy(name,rq,strlen(rq)+1);
        return *this;
    }


    Теперь получаем:

    Queue * q1 = new Queue("test");
    Queue q2(*q1);
    delete q1;
    std::cout<<q2.name; //test
    Ответ написан
    Комментировать
  • Зачем в производных классах делать виртуальную функцию?

    @sddvxd Автор вопроса
    Разобрался благодаря статье https://msdn.microsoft.com/ru-ru/library/0y01k918.aspx
    Ответ написан
    Комментировать
  • Почему компилятор не находит прототип?

    @sddvxd Автор вопроса
    Разобрался: необязательные параметры должны находиться справа
    Ответ написан
    Комментировать