Ответы пользователя по тегу C++
  • Как хранится c++ struct в памяти и как определить размер вручную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    поэтапаный алгоритм определения размера

    Если откинуть тонкости связанные с битовыми полями, то алгоритм простой. Обозначим выравнивание всей структуры A, размер всей структуры S, размер головы структуры из i полей Si, размер i-го поля SFi, выравнивание i-го поля AFi, операцию округления X вверх до ближайшего кратного Y R(X, Y) (т.е., например, R(4, 4) = 4, R(5, 4) = 8), количество полей структуры n. Тогда

    S0 = 0
    Si = R(Si - 1, AFi) + SFi
    A = maxi = 1..n(AFi)
    S = R(Sn, A)

    Второй и третий шаги гарантируют, что в выравненной структуре каждое поле тоже выравнено.
    Четвёртый шаг гарантирует, что если такие структуры поместить в массив, то все элементы массива будут одинаково выравнены.

    Разумеется всю эту математику имеет смысл делать если пишешь компилятор, во всех остальных случаях размеры и выравнивания структур можно узнать непосредственно у компилятора.
    Ответ написан
    Комментировать
  • Как в С++ проверить double на целочисленность?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #include <cmath>
    int isInteger(double num)
    {
        return num == trunc(num);
    }

    Ну и нужно понимать, что с некоторого (в зависимости от конкретной разрядности double) значения порядка любой double станет целочисленным из-за ограниченности длины мантиссы.
    Ответ написан
    8 комментариев
  • Почему при запуске программы через командную строку на mac выходит segmentation fault 11?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    atoi(argv[1]) ожидает, что у программы при запуске будет как минимум один параметр командной строки. Segfault который ты видишь -- это результат запуска программы без аргументов.
    Ответ написан
    1 комментарий
  • Почему constinit помогает решить проблему static order initialization fiasco?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Единицы трансляции ведь загружаются в произвольном порядке?

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

    Каким образом наличие слова constinit в одной из единиц трансляции гарантирует, что она загрузится раньше?

    Это слово гарантирует, что такой объект будет инициализирован до начала динамической инициализации, см, а это всё, что требуется для решения проблемы static order initialization fiasco.
    Ответ написан
    Комментировать
  • Почему не выводятся данные в консоль?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как только я ввожу число литров и нажимаю энтер все сбрасывается и ничего не выводится. Код пишется в vscode, код пытаюсь запустить в самой консоли vscode. В чем может быть проблема?

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

    Может с кодом что-то не то

    С кодом всё ок.
    Ответ написан
    1 комментарий
  • C++ CMake Как исправить ошибку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не могу понять в чем дело

    Судя по всему в макросе assert использован текст с какими-то забавными символами. Два очевидных способа решения:
    - можно эти строки удалить, в корректно написанной программе они ни на что не влияют.
    - можно разобраться с тем, что не так внутри assert. Начать можно, например, выполнив вместо компиляции препроцессирование (заменив в командной строке вызова gcc -c на -E) и почитав внимательно препроцессированный код в местах на которые ругается компилятор.
    Ответ написан
    Комментировать
  • Как исправить проблему с шаблонами?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ошибки вылезают в месте оператора перегрузки () и Image operator!() возникает ошибка.

    Это правильно. Нельзя перегрузить функцию (или оператор) только типом возвращаемого значения.

    Если убрать Image operator!(), то только одна ошибка ("невозможно преобразовать const_Ty в T&")

    Приведённый код эту ошибку не воспроизводит. Но вообще ничто не мешает добавить const в определение оператора !(), поскольку ему не требуется менять исходный объект:
    Image<T> operator!() const

    Но я вижу другую ошибку: оператор вызова функции определён как константный: T& operator()(int i, int j) const, но возвращает потенциально неконстантную ссылку на внутренности объёкта -- T&. Следующий код поэтому не будет работать: result(i, j) = -_data[i][j];. Нужно либо выбросить ссылку из возвращаемого значения оператора T& operator()(int i, int j) const и переписать реализацию оператора !(), либо добавить неконстантную реализацию оператора вызова функции.
    Ответ написан
    Комментировать
  • Реализую свойства, но почему у string требует перегрузку для cout?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Property<std::string> Name = Property<std::string>(_name);
    …
    std::cout << person.Name << std::endl;  // тут ошибки

    почему у string требует перегрузку для cout?

    Потому что Property<std::string> -- это не string. Хоть у тебя и есть Property<T>::operator T() const ничто в твоём коде не говорит о том, что Property<std::string> нужно пытаться приводить к string а не к какому-нибудь другому типу.
    Ответ написан
    1 комментарий
  • Почему SFML не линкуется к проекту?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Собрал SFML из исходников…
    main.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (__imp_??0VideoMode@sf@@QEAA@III@Z) referenced in function main
    main.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl sf::WindowBase::isOpen(void)const " (__imp_?isOpen@WindowBase@sf@@QEBA_NXZ) referenced in function main
    main.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl sf::WindowBase::pollEvent(class sf::Event &)" (__imp_?pollEvent@WindowBase@sf@@QEAA_NAEAVEvent@2@@Z) referenced in function main
    main.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl sf::Window::Window(class sf::VideoMode,class sf::String const &,unsigned int,struct sf::ContextSettings const &)" (__imp_??0Window@sf@@QEAA@VVideoMode@1@AEBVString@1@IAEBUContextSettings@1@@Z) referenced in function main
    main.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl sf::Window::~Window(void)" (__imp_??1Window@sf@@UEAA@XZ) referenced in function main
    main.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual void __cdecl sf::Window::close(void)" (__imp_?close@Window@sf@@UEAAXXZ) referenced in function main

    В моей версии sfml эти символы определены в библиотеке sfml-window, которой у вас нет.
    Ответ написан
  • Утечка памяти gdiplus?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что я должен удалять или очищать и как я должен это делать?

    MSDN говорит, что у каждого GdiplusStartup должен быть парный вызов GdiplusShutdown.
    Ответ написан
    1 комментарий
  • Где найти такую CLI?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Хочется как-то отойти от указания всех параметров а считать что есть некий контекст.

    Я вот так делаю в подобных случаях. Т.е. загружаю конфигурацию из конфиг-файла если он есть, а потом поверх неё -- из параметров командной строки. Среди которых могут быть другие конфиг-файлы.
    Ответ написан
    Комментировать
  • Пробую собрать bmminer-cgminer492, ошибка при сборке. Каких зависимостей не хватает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    получаю следующую ошибку

    судя по тексту ошибок, всего хватает, но ошибки в коде. Я бы в cgminer.c добавил #include <inttypes.h>
    Ответ написан
    Комментировать
  • Генерация паролей на c++ Не могу понять в чем проблема?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    std::pow(alphabet.length(), password_length);

    82 в десятой степени -- это 0xbebf59a0_7dab4400, т.е. это число уже не влезает в 64-битный long long int. Вам нужно придумать другой способ считать пароли.
    Ответ написан
    Комментировать
  • Как исправить вывод матрицы С++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    при замене почему то предпоследний элемент строки и столбца заменяется на случайное число из матрицы

    не на случайное же, а поскольку строка пересекается с заменяемым столбцом, то на тот элемент, который был из строки скопирован в столбец ранее.

    Можно пофиксить например так:

    void replaceColumn(int** matrix, int size) {
        int maxRow = 0;
        int maxElement = 0;
        int copy;
    
        // Находим строку с максимальным элементом
        for (int i = 0; i < size; ++i) {
            for (int j = 0; j < size; ++j) {
                if (matrix[i][j] > maxElement) {
                    maxElement = matrix[i][j];
                    maxRow = i;
                }
            }
        }
    
        copy = matrix[maxRow][size - 2];
        // Заменяем предпоследний столбец найденной строки
        for (int i = 0; i < size; i++) {
            matrix[i][size - 2] = (i == size - 2) ? copy : matrix[maxRow][i];
        }
    
    }
    Ответ написан
  • Как собрать приложение на языке программирования C++, используя CMake?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как мне организовать систему сборки, чтобы любой пользователь мог запустить приложения, имея .exe файл и папку data ( aka DATA_DIR )

    Для этого нужно научить приложение находить папку data. Сейчас ты, похоже, используешь полный путь из DATA_DIR. Возможно ты хочешь искать data относительно положения исполняемого файла. Это должно быть в логике приложения, я не вижу, как тебе может помочь система сборки, если пользователи не будут пересобирать приложение.
    Ответ написан
    4 комментария
  • Как экспортировать экземпляр класса из DLL при LoadLibrary?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я вижу проблему в определении класса module::module. Ты хранишь экземпляры этого класса в векторе, но у него нет конструкторов копирования и операторов присваивания. А это значит, что созданный здесь временный объект module::module будет там же и разрушен с вызовом FreeLibrary и потерей актуальности всех статических указателей в модуле который был загружен. Среди которых будут указатели на таблицы виртуальных функций для классов определённых в этом модуле.
    Ответ написан
    4 комментария
  • Работа с рисованием в Qt. Почему не получается рисовать после оператора if?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не нужно делать setChecked(false) в обработчике paintEvent, потому что paintEvent случается довольно таки асинхронно по отношению к событиям генерируемым UI.
    Ответ написан
    1 комментарий
  • Как это можно пофиксить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как это можно пофиксить?

    Можно внести поле SDL_RendererRenderer в структуру struct structTile.
    Ответ написан
    Комментировать
  • Какие минимальные знания С++ должны быть, чтобы начать изучать Unreal Engine 5?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что мне стоит делать дальше?

    Изучать обе параллельно.

    какие минимальные знания С++ должны быть, чтобы начать изучать Unreal Engine 5

    Понимание синтаксиса и способность читать документацию.
    Ответ написан
    Комментировать
  • Как работает данный алгоритм проверки числа на простоту и какой у него Big O??

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как работает данный алгоритм проверки числа на простоту

    Данный алгоритм работает неправильно, первая ошибка состоит в том, что происходит обращение к неинициализированным элементам массива a.
    Ответ написан
    Комментировать