• Как скомпилировать в один большой запускной файл?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Да. Читайте про статическую линковку.
    Помимо этого, можно просто все нужные зависимости поставлять с исполняемым файлом.
    Ответ написан
    2 комментария
  • Где искать в памяти qml файл?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    rootObjects() возвращает только список объектов, которые были загружены с помощью load() или указаны в конструкторе QQmlApplicationEngine. Если вы ничего не загружали, то список будет пустым.
    Чудес не бывает, если QList::operator[], говорит, что даже первого элемента нет, значит он пуст. Скорее всего там 0 элементов в отладчике. Если их не 0, но обращение к первому элементу вызывает assert, то там где-то выше может быть UB или память испортилась.
    Ответ написан
    Комментировать
  • Почему в с++ не могут избавиться от переполнения буфера?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Зачем избавляться от strcpy? Она проста и эффективна, как и большая часть языка C. Проверка длинны строки на каждый символ или просто дополнительная проверка -- это проверка и, как следствие, затраченное время. При определённой культуре программирования, покрытия кода тестами (в том числе и со случайными данными), ревью, и использовании средств статического и динамического анализа, риски можно минимизировать. Взамен вы получаете быстрый и легкий код, практически без оверхеда. Из-за отсутствия оверхеда (тяжёлого рантайма), этот язык популярен для всяких системных вещей (я всё ещё скептически настроен насчёт Rust) + очень много кода на нём уже написано и его надо поддерживать + интерфейсы многих библиотек написаны на C из-за возможных проблем с ABI, в случае C++, например и т.п.
    В C++ дела обстоят по-другому, и мешать (а тем более путать) его с C не стоит (ну только, если надо что-то системное дёрнуть в недрах вашего кода или написать обвязки для C библиотеки).
    Ответ написан
    3 комментария
  • TDD, каким образом протестировать приватные методы?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Тут возникает вопрос, зачем вам напрямую тестировать недоступные из открытого интерфейса методы класса? Когда вы пишете модульные тесты для класса, закрытые методы будут протестированы через открытые. Если не будут, то они могут быть удалены, т.к. класс их не задействует :)
    В крайнем случае, класс тестов можно сделать дружественным классу, закрытые методы которого вы собираетесь тестировать. Я только не понимаю, зачем.
    Ответ написан
    3 комментария
  • Постоянные запросы к QMap или локальная копия объекта. Где лучшая производительность?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Ваш код тормозит? Если да, то профилируйте, и смотрите где. Если не профилировали, то и нечего говорить о производительности :)

    Метод value всегда вернёт копию значения. Т.е. логично её где-то сохранить, если вам надо несколько раз обращаться к разным полям. Можно избежать копирования, используя итератор или константную ссылку + оператор [] у мапы.

    Почитать в официальной документации Qt. Можно ещё на QHash посмотреть, там поиск быстрее, но на ключ накладываются другие ограничения.
    Ответ написан
    Комментировать
  • Как быстро конструировать большой QByteArray из частей других QByteArray?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Я вижу несколько вариантов:
    1) Заранее выделять/резервировать память в результирующем контейнере (resize()/reserve()). Можно просто где-то много памяти выделить и как буфер её использовать.
    2) Использовать другую структуру данных для результата. Но тут должен быть баланс, возможно вы лишитесь преимущества кэш-линии, но быть может это будет не критично.
    3) Можно просто в какой-то структуре хранить объекты, а потом собирать, когда достаточно накопится.
    Ответ написан
    2 комментария
  • Где найти примеры проектов с использованием UML?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Возьмите книгу "Крэг Ларман. UML". Книга отличная, рекомендую и после экзамена целиком прочитать.

    PS Рекомендую установить программу проверки орфографии.
    Ответ написан
    Комментировать
  • Что нужно изучить, чтобы знать «Основы программирования»?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    То что создатели курсов подразумевают под основами программирования надо выяснять у них.
    Рекомендую прочитать книгу Чарльз Петцольд Код + любой язык на базовом уровне. Этого должно хватить.
    Ответ написан
    Комментировать
  • Как ограничить допустимые типы при описании шаблона типа в C++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Начиная с C++17, можно использовать constexpr if в шаблонах: en.cppreference.com/w/cpp/language/if . В самом условии что-то вроде en.cppreference.com/w/cpp/types/is_same, ну и выдавать ошибку компиляции, если типы не соотвествуют. Правда правила вам всё равно руками придётся прописывать или почитать advanced template metaprogramming.
    Есть ещё вариант c boost::mpl, например использовать mpl::vector.
    Ответ написан
    Комментировать
  • Слоты в Qt C++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Нужен & перед первым myObj.

    В остальном я код комментировать не буду, т.к. много и долго.
    Ответ написан
    Комментировать
  • CLion: запуск программы невозможен, отсутствует dll; Как решить?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Можно включить всё явно. Читайте про статическую сборку.
    Не знаю, чем вы собираете, но во флаги линкера можно добавить что-то вроде, для gcc: -static-libstdc++ -static-libgcc. Возможно под виндами что-то ещё придётся линковать статически. Размер исполняемого файла увеличится, ясное дело.

    А если вы хотите добиться результатов как в CodeBlocks, то просто посмотрите какие флаги эта IDE добавляет в Makefile и добавьте тоже самое.
    Ответ написан
    2 комментария
  • Приведение типов указателей, как перегрузить?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Вообще, если вам по какой-то причине необходимо преобразование вниз по иерархии классов, то это признак плохой архитектуры, т.к. неверно передаются зависимости или неверно выделены интерфейсы или вы как-то неправильно работаете с библиотекой. Хотя, конечно бывают и исключения, но их немного.
    Ответ написан
    Комментировать
  • Git - объясните, пожалуйта, зачем придумали add? Почему нельзя было сразу делать commit (Без add)?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Почему бы просто не почитать документацию? Она даже на русском есть: https://git-scm.com/book/ru/v1/%D0%92%D0%B2%D0%B5%... . Сразу множество вопросов отпадёт. Ведь подобные вопросы зачастую от незнания истории и непонимания самой технологии.
    Ответ написан
    Комментировать
  • Как делать GLSL шейдеры???

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Для начала следует научиться пользоваться поиском. Ответы на все ваши вопросы, кроме персонального, можно нагуглить за считанные минуты. Гуглить желательно на английском.
    Пора уже привыкнуть, что до того момента, пока вы не наберёте определённый опыт (да и во многих случаях потом) ничего не будет работать с первого раза, а если и будет, то, не так как надо. Никто вообще не обязан вам предоставлять какую бы то ни было конкретику и т.п. Непонятно? Гуглите, читайте книги, собирайте материал из разных источников. Ещё раз, на вопросы вашего уровня уже давным-давно есть сотни ответов в интернете.
    Ответ написан
  • Как сделать, чтобы qDebug выводил в консоль на Ubuntu?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Попробуйте выставить: QT_LOGGING_TO_CONSOLE=1
    Если не поможет, то скачайте инсталлер Qt с официального сайта и попробуйте ещё раз (можно без QT_LOGGING_TO_CONSOLE). Если заработает, то бага в сборке Qt для Ubuntu.
    Ответ написан
  • Какой компилятор установить для Clion?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    А они разве не поставляют компилятор под винду вместе с IDE? Под Линукс, например поставляют и компилятор, и отладчик, и даже cmake.
    Ответ написан
    7 комментариев
  • Какие текущие ограничения WebAssembly?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Да они есть. Например исключения не поддерживаются. Но ответ легко нагуглить.
    Ответ написан
    Комментировать
  • Создание нового окна QT. Ошибки при компиляции. Как исправить?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    В сообщении об ошибке UI в верхнем регистре, в коде, i в нижнем. Посмотрите, как сгенерирован файл ui_anotherwindow.h, там пространство имён должно совпадать с пространством имён из anotherwindow.h, ну и везде по коду.
    Ответ написан
  • Прикладное применение интерфейсов?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Две последние буквы SOLID для вас ( https://en.wikipedia.org/wiki/SOLID_(object-orient... ). Вообще рекомендую прочитать всю эту статью, она очень дельная (+ все ссылки из секции Design and development principles). Использование этих принципов позволят писать относительно неплохой код даже без понимания (которое приходит с опытом обычно). Кстати, в этих статьях должны быть ссылки на книги по ОО-проектированию (ну в любом случае они неплохо гуглятся).
    Необходимость в интерфейсах и абстрактных классах возникает в основном в больших коммерческих проектах. Использование интерфейсов позволяет понизить связанность компонентов системы (их уровень знания друг о друге), что, в свою очередь, позволяет легче модифицировать систему, работая в команде. Например пишет один программист какой-то класс для запуска задач и делает у него метод, который принимает интерфейс IRunnable (возможно с одним методом run()) и описывает контракт (правила, как метод run() должен себя вести). После этого, любому другому программисту достаточно будет реализовать интерфейс по контракту и он сможет пользоваться классом для запуска задач. При этом, класс для запуска задач вообще понятия не имеет о том что он запускает, ему важно знать, что это можно запустить, и любому другому классу нет необходимости знать, как его запускают, достаточно просто реализовать метод.
    Ответ написан
    Комментировать
  • Как исправить ошибку неопределённая ссылка на символ?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    В CMake есть возможность использовать автоматический поиск zlib (если этот символ и правда оттуда) https://cmake.org/cmake/help/v3.10/module/FindZLIB.html .
    Или добавьте ваш флаг к флагам линкера.

    Детальных инструкций не даю, а то ещё гуглить разучитесь. Нуб не нуб -- это не оправдание.
    Ответ написан