• Как передать json buffer как аргумент функции в ArduinoJson 6?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Похоже что тут размер должен быть известен на этапе компиляции. Проще передать в функцию не размер буфера, а скажем сам буфер, или сделать функции шаблонный параметр с размером буфера.

    Ваш вариант с переменной не подходит, потому что её значение на этапе компиляции не известно.

    Можно ещё попробовать DynamicJsonDocument его размер можно указать в рантайме, согласно документации.
    Ответ написан
    Комментировать
  • Какой стандарт c++ изучать?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    C++17 -- нормальный стандарт для изучения.

    Дело всё в том, что все стандарты после 11го подход к разработке кардинально не меняют, а просто добавляют немного фич. Не обязательно осваивать все возможности языка -- их в плюсах много.
    Ответ написан
    Комментировать
  • Как подключить библиотеку dll в QtCreator?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Если имеется ввиду qmake (*.pro файл), то:
    LIBS *= "path_to_dll"
    INCLUDEPATH *= "path_to_headers"

    Ну а в коде просто иклюдить как обычно после этого.

    С CMake проектами будет иначе. К слову, скоро Qt официально перейдёт на CMake.
    Ответ написан
    23 комментария
  • Как создать класс, расширяющий библиотеку C++ под QT для работы в QML?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Скорее всего, вы просто не зарегистрировали тип с помощью qmlRegisterType. Это нужно сделать для всех классов, которые будут использоваться в QML. Тут есть больше деталей: https://doc.qt.io/qt-5/qtqml-cppintegration-define...

    Есть ещё вот такая техника: https://doc.qt.io/qt-5/qtqml-cppintegration-define...
    Возможно, это именно то, что вам необходимо.
    Ответ написан
    Комментировать
  • Дают ли банки своим программистам ипотеку по льготным условиям?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Я сам в банке не работал, но слышал от людей, которые работали, что льготные ипотеки есть.

    Ещё во многих компаниях практикуется рассрочка: тебе дают деньги, ты покупаешь квартиру, но и с зарплаты отдаёшь каждый месяц. Процентов нет никаких, но почти во всех случаях вам нужно выплатить весь остаток в случае увольнения.

    А ещё я знаю компании, где с одного-двух годовых бонусов, на некоторых проектах, можно взять заветную студию в панельном гетто за ~5кк :)

    В общем и целом, всё зависит от ваших социальных навыков.
    Ответ написан
    Комментировать
  • Узко vs Широконаправленный разработчик?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    То что вы перечислили -- это фундаментальные знания. Без них разработчик -- просто мартышка. Да, они нужны, т.к. это база.
    Но ещё нужен и практический опыт. Потому что вакансии без опыта обычно предполагают простые задачки, где особо не надо думать. Наличие фундаментальных знаний может определить, насколько быстро вы пройдёте этот этап. Ну или можно навсегда остаться "решающим задачи программистом, которому это не нужно". Таких тут много, почитайте ответы.
    Ответ написан
    Комментировать
  • Oшибка iostream vs code, как исправить?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Рекомендую использовать IDE если вы только изучаете C++. Там вы, с большой вероятностью, таких проблем не получите. Всё-таки блокноты с плагинами -- это немного другое.
    Ответ написан
    1 комментарий
  • Как передать двумерный массив в функцию без динамического выделения памяти?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Да есть. В C++ есть стандартная библиотека, в которой есть некоторые структуры данных:
    #include <vector>
    
    template <class T>
    using Matrix = std::vector<std::vector<T>>;
    
    // ... 
    
    template <class T>
    void print(const Matrix<T> &matrix)
    {
        for (auto &&r : matrix) {
            for (auto &&e : r) {
                std::cout << e << " ";
            }
            std::cout << std::endl;
        }
    } 
    
    // ...
    
    Matrix<int> m = {
        {1, 2, 3},
        {5, 6, 7, 8},
        {9, 10}
    }
    
    print(m);


    Вот тут можно прочитать о классе vector: https://en.cppreference.com/w/cpp/container/vector

    PS
    Я это всё не компилировал, но как-то так в общем должно работать.
    Ответ написан
  • Как обосновать повышение зарплаты?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Составил список, что полезного сделал для компании, какие инициативы предпринял, но потом подумал, что это всё обычные обязанности админа в любой компании.

    Всё верно: ваш список -- это просто рабочие обязанности и не более того. Такие иногда и в резюме пишут (что разумеется ошибочно). Проблема в том, что это и не повод повысить вам зарплату.

    На это надо смотреть немного с другой стороны. Просто ответьте на вопрос: как то, что вы делали помогло компании увеличить прибыль и/или сократить издержки. Желательно дать количественную оценку. Например, "сэкономил N сотен тысяч долларов, закупив оборудование у дядюшки Ляо; в перспективе это бла-бла-бла..." или там "автоматизировал то-то, что сэкономило N человеко-часов и около K денег".

    Ну и вообще старайтесь всё делать в дальнейшем с учётом влияния на бизнес. Разумеется, если хотите как-то карьерно и финансово расти.

    Более примитивный вариант с предложением о работе от другой компании тоже работает. Но, чаще всего до некоторой границы. Можно конечно прыгать между компаниями за повышение зарплаты на 10-20к рублей, но это в перспективе не серьёзно выглядит.
    Ответ написан
  • Есть ли жизнь в госкорпорациях?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    На хабре и тостере много раз поднимали тему, что не нужно работать в различных госкомпаниях (что там кумовство, низкие зарплаты, ограничения на выезд, бюррократия и прочее).

    Тут, на самом деле, не слишком зависит от того, государственная компания, или частная. Всё что вы описали в скобках везде встретить можно. Другое дело, что, судя по тому, что говорят и пишут люди, в государственных учреждениях это просто чаще встречается. Не факт, что это обязательно будет комбинация всего того, что вы написали, но бюрократия и кумовство почти на 100% будут.
    Разумеется всё нужно проверять насколько это возможно. Но я бы, на вашем месте, очень сильно поостерёгся в гос. компанию идти, но это моё персональное мнение.

    А если речь про госкорпорации типа: газпром-нефть, роснефть, татнефть, лукоил и прочее. Т.е. компании, которые хвалятся тем, что они идут в ногу со временем и прочее. Там адекватно работать или нет?

    Хвалиться-то любой может. Что в этом сложного. Всё зависит от того, что для вас означает "адекватно": для разных людей это будут совершенно разные условия.

    Вы же не ждёте ответа вроде "всё там норм, иди и даже не думай!"? Вы перечислили кучу разных компаний, в которых есть много разных подразделений с совершенно разным назначением и условиям труда. Ваш вопрос предполагает ответ вроде "42".

    Попробуйте провести анализ на основе открытых данных в интернете. Например налоговых отчётах, отчётах о прибыли, реальных инновациях, вакансиях, анонимных отзывах и т.п.
    Ответ написан
    Комментировать
  • Небольшая задача из книги Страуструпа. Как её решить?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Условие правильное, просто наверное перевод немного странный.
    Программа и выведет возраст в месяцах. Однако, если пользователь введёт не целое число лет, например 5,5, а вы сохраните результат в целочисленную переменную, то вы потеряете полгода, или 6 месяцев. Программа наглядно это демонстрирует. Просто попробуйте использовать для хранения введённых данных сначала int, а потом double и посмотрите на результат, после ввода 5,5 в обоих случаях. Упражнение нацелено как раз на это.
    Ответ написан
    Комментировать
  • Как правильно пользоваться разделителем кода для Windows и linux?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Да, это нормальный подход. Но такой код необходимо хорошо изолировать за кросс-платформенными интерфейсами. Так будет легче поддерживать проект, ну или использовать кросс-платформенные библиотеки в дальнейшем.
    Ответ написан
    Комментировать
  • Трудоустройство в Украине без приписного (военного билета соответственно)?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Сразу скажу, что я не гражданин Украины. Всё, что я пишу ниже, почерпнул из рассказов знакомых (в том числе и украинцев).

    Я думаю, что учитывая реалии Украины, никому, кроме гос. контор это не интересно. В Украине большая часть разработки -- это аутсорс, где разработчики оформлены как контрактники (статус ИП; кажется это у них называется ФОП). В этом случае, никому не интересно ваше приписное/военный билет, просто не акцентируйте на этом внимание. Я почти уверен, что большая часть компаний, которые людей берут в штат, тоже на это не особо смотрят.
    Ответ написан
    Комментировать
  • Как протестировать с помощью gtest функцию main(argc, argv[])?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    По факту получается, что вы пишите системный тест. Следовательно, для него вам необходимо уже скомпилированное приложение.
    Самый простой вариант, в этом случае -- это просто вызывать приложение с помощью std::system и проверять вывод. Так как std::system возвращает просто код завершения, вывод можно писать в какой-нибудь файл. Ну а потом, как и в обычном тесте, сравнивать то что получилось и то, что должно получиться. По факту у вас есть два приложения: сам тест и та утилита, которую вы тестируете.
    Ответ написан
    Комментировать
  • Развитие разработчика. Интересная работа или деньги?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    В целом:
    В разработке ПО всегда учатся новому. И не всегда в рабочее время.
    Если не нравится, то придётся смириться и терпеть, или сидеть в болоте или искать другую работу.

    По поводу вашей ситуации:
    Так что мой вам совет: качайте скилл, и меняйте работу на что-то более интересное.

    Деньги vs. интерес:
    На определённом этапе, деньги перестают играть существенную роль. По факту, это если закрыто основание пирамиды Маслоу. То есть, есть у вас жильё, которое вас устраивает, хватает денег на развлечения, еду и прочее. Прекрасно! Тогда, прибавка к з/п, допустим, в $1k (довольно хорошая прибавка) просто не будет ощущаться. Вам банально некуда это тратить.
    Разумеется, случаи разные бывают, и если ваша самореализация -- это заработать как можно больше денег, уйти на пенсию в 30, приобретать всё самое дорогое... Тогда вам этот стиль не подойдёт.
    Ответ написан
    2 комментария
  • Система сборка QBS - скорее мертва, чем жива?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Qbs официально не поддерживается. Возможно кто-то из сообщества будет что-то делать, но не The Qt Company. Сборка самой Qt уже активно переводится на CMake. Этот генератор систем сборки и будет официально поддерживаемым. Поэтому, оставайтесь на CMake.
    Ответ написан
    Комментировать
  • Статическая компиляция QT?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Так можно сделать, для этого вам нужна статическая сборка Qt. Только в профайл вашего проекта ещё надо будет добавить static в переменную config.
    Ответ написан
  • В чем суть %d, %o, %s и %c?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    А в чём конкретно проблема? Вот тут https://en.cppreference.com/w/c/io/fprintf есть подробное описание и примеры использования.

    Использовать, чтобы было быстрее и проще выводить различные строки. Допустим, надо вам вывести в лог какое-то сообщение, в котором будут фигурировать значения переменных, вы можете сделать так:
    int v1 = 1;
    float v2 = 2.4;
    printf("My message %i with some data %f", v1, v2);

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

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Да.

    Это целочисленный литерал с точки зрения языка. Суффикс может уточнить тип, например 1u указывает, что это беззнаковый целый тип, а 1.f что это число с плавающей точкой (единичной точности), а 1.d двойной.

    Кроме того, результирующей тип выражения будет определятся на основе типа операндов. Например, в вашем коде "a / 4" -- это int, а "a / 4.d" уже double. Поэтому, когда вы посмотрите содержимое x, то можете быть немного удивлены.

    Если вы задаёте все эти вопросы не с целью потроллить, то прочтите вот эту тонюсенькую книжечку: https://www.amazon.com/Programming-Language-2nd-Br... . Около 300 страниц всего; русская версия тоже есть.
    Ответ написан
    6 комментариев
  • Не получается объявить двухмерный динамический массив?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Вы или тег "C++" уберите, или C++ используйте, а не C.
    using Map = std::vector<std::vector<char>>;
    Map map = {
       {1, 1, 1},
       {0, 1, 0},
       {0, 1, 0},
    };
    
    // ...
    void scaleMap(Map &map, int coefficient)
    {
       // ...
       Map newMap(newSize, std::vector<char>(newSize));
       // ...
       map.swap(newMap);
    }

    Всё просто, быстро и безопасно. Главное за границы массива не выходите.
    Ответ написан
    Комментировать