Ответы пользователя по тегу C++
  • Зависает проект на 73% ошибка в c++ как исправить?

    @res2001
    Developer, ex-admin
    Похоже обращение к памяти по нулевому указателю.
    Запускайте под отладчиком и смотрите где у вас нулевой указатель.
    Ответ написан
  • Как реализовать выполнение действий на C++ при изменении данных в таблице MySQL?

    @res2001
    Developer, ex-admin
    Используйте MySQL Connector/C++ для подключения к mysql и отправки запросов, на основании ответов делайте то что нужно.
    Ответ написан
    1 комментарий
  • Как удалить одинаковые элементы из списка?

    @res2001
    Developer, ex-admin
    В общем случае сортируете, проходите по списку и удаляете рядом стоящие одинаковые элементы.

    Но может надо решать проблему более кардинальным образом - вместо list использовать более подходящий контейнер - set? В set элементы уже отсортированы и уникальны.
    Ответ написан
    4 комментария
  • CodeRunner в VS Code выдает ошибку?

    @res2001
    Developer, ex-admin
    Так как в выводе сплошные кракозябры, то можно только предполагать, что при запуске не удалось найти g++.
    Выполните эти же команды из командной строки или настройте кодировку вывода в VS Code на cp866 - кодовая страница по умолчанию в командной строке русской винды.
    Ответ написан
    Комментировать
  • В чем разница перегрузки функции и перегрузки операции?

    @res2001
    Developer, ex-admin
    Нет разницы.
    Операторы частный случай функции, только со строго заданными и описанными в стандарте сигнатурами и со специфическим ключевым словом operator. Ну и разница в использовании - вызовы операторов, как правило, компилятор подставляет в код сам, а функции явно вызывает программист. С точки зрения именно перегрузки разницы нет.

    UPD: дополнительно смотри комментарий Евгений Шатунов
    Ответ написан
    3 комментария
  • Как ограничить смещение битов?

    @res2001
    Developer, ex-admin
    Вам нужен циклический сдвиг?
    Придется реализовывать самому - просто проверьте перед сдвигом последний бит, если он равен 1, то после сдвига прибавьте 1 к числу.
    if(m_d[i] & 0x80) {
      m_d[i] = (m_d[i]<<1);
      ++m_d[i];
    } else {
      m_d[i] = (m_d[i]<<1);
    }
    Ответ написан
    Комментировать
  • Как правильно пользоваться итераторами? Можно ли создавать 2 итератора на 1 контейнер?

    @res2001
    Developer, ex-admin
    Можно 2 итератора. Посмотрите пример проверки на полиндром тут. Правда там строки и нет изменений контейнера.
    Ответ написан
  • OpenSSL.exe встраивание в свою программу?

    @res2001
    Developer, ex-admin
    OpenSSL.exe это клиент для libssl. Вам нужно встраивать не exe, а использовать библиотеку.
    Ответ написан
    1 комментарий
  • Как в программе работает перегрузка?

    @res2001
    Developer, ex-admin
    У вас не верно перегружен operator* - он должен возвращать объект или ссылку на объект своего класса (т.е. он должен возвращать Kvadrat&): https://en.cppreference.com/w/cpp/language/operators

    Параметры передаются не в перегрузку, а в функцию или метод (перегруженные операторы частный случай метода).

    Для бинарных операторов вызывается перегруженная операция для класса, стоящего слева в выражении. Например для kvad * k - вызовется kvad.operator*(k).

    Если вы напишете k * kvad, то будет ошибка компиляции, т.к. компилятор не сможет преобразовать kvad во float. Но вы можете этому помочь, перегрузив operator float() для Kvadrat.
    Ответ написан
    Комментировать
  • Настройка IPSec средствами С++?

    @res2001
    Developer, ex-admin
    Какая ОС интересует? IPSec входит в стандарт стека TCP/IP, который предоставляется ОС. Соответственно и все API ОС зависимое.
    В винде это WFP API.
    В никсах все несколько сложнее - там задействовано как ядро ОС так и стороннее ПО. Больше подробностей можете посмотреть, например тут и тут.
    Ответ написан
    2 комментария
  • Как вывести данные в таблицу с 4 столбцами?

    @res2001
    Developer, ex-admin
    for (char I = 'A', i = 'a'; I <= 'Z'; ++I, ++i) {
            cout << setw(54) << " | " << setw(4) << I << " | " << setw(13) << static_cast<int>(I) << " | ";
            cout << setw(4) << i << " | " << setw(13) << static_cast<int>(i) << " | " << endl;
    }
    Ответ написан
    Комментировать
  • Линковка с библиотекой C++?

    @res2001
    Developer, ex-admin
    mmsystem.h и winmm.lib - это стандартные виндовый заголовочный файл и библиотека, предоставляется вместе с Windows SDK, который входит в состав Visual Studio. mmsystem.h в студии доступен изначально, просто используете его в #include, копировать его в свой проект не нужно. winmm.lib то же доступен, но его надо подключить к проекту - опция -lwinmm.lib компилятора или задать в свойствах проекта как дополнительную используемую библиотеку, если используете IDE. По умолчанию она не подключена.

    Вообще для подключения сторонних библиотек к любому С/С++ проекту надо:
    1.добавить путь где лежать заголовочные файлы библиотеки опцией -I<path header files> в команду запуска компилятора.
    2.добавить путь где лежат lib файлы (lib для msvc) библиотеки в опцию -L<path to lib files>. Если библиотечный файл один, то этот пункт можно пропустить и задать полный путь в п.3. Если файлов несколько, то проще задать путь к каталогу в опции -L, а в п.3 указывать только имя конкретного файла библиотеки.
    3.добавить имя файла библиотеки (lib файла) в опцию -l<lib name> или полный путь к lib файлу.

    Если вы собираете из IDE, то те же действия надо проделать в настройках проекта. Опции компилятора практически универсальны - те же опции (и аналогичный подход) используются в msvc, gcc, clang и других компиляторах.
    По сборке библиотек с Qt проектом:
    В pro файле:
    переменная LIBS - задаются опции -L и -l компилятора (п.2 и п.3)
    переменная INCLUDEPATH - задаются опции -I компилятора (п.1)
    Например:
    INCLUDEPATH += -Ipath/to/header/files
    LIBS += -Lpath/to/lib/files -lmylibfile

    Это все легко гуглится.
    Ответ написан
    Комментировать
  • Как составить программу чтобы определить симметричность одномерного массива из k элементов?

    @res2001
    Developer, ex-admin
    Примерно так же как и определение палиндромов из этого примера (смотрите пример в конце). Нужно только заменить строки на вектора.
    Ответ написан
    Комментировать
  • Что не так с кодом? Как правильно делать?

    @res2001
    Developer, ex-admin
    Кодировка консоли в винде по умолчанию cp866 (а не 1251 как многие думают). Но можно переключить.
    Для простоты сохраните ваши исходники в 866 кодировке.
    setlocale работает только на вывод. Для ввода используйте cout.imbue.

    Переключать кодировку консоли из утилиты - дурной тон. Для студенческой лабы это еще терпимо, но нормальная русская консольная утилита должна уметь правильно выводить текст не зависимо от того какая кодировка установлена в консоли 866 или 1251. Например, почти все родные виндовые консольные утилиты с этим справляются успешно.

    По уму делать примерно по следующей схеме:
    1.Исходники в UTF8
    2.Все строковые константы с префиксом L"string"
    3.Строки хранить в wchar_t
    4.Определять кодировку консоли для ввода и вывода и перекодировать свои юникодные строки в нужную кодировку и только потом выводить или после ввода перекодировать в UTF8. Для перекодирования в WinAPI все есть, но без windows.h не обойтись.
    Ответ написан
    Комментировать
  • Что значит "написанная на чистом C++"?

    @res2001
    Developer, ex-admin
    Когда говорят подобную фразу применительно к Си, обычно имеют ввиду программу, написанную на Си без дополнительных зависимостей, в т.ч. и без зависимостей от стандартной библиотеки, т.е. Си и ОС.
    Предполагаю, что и в случае с С++ именно это имеется в виду.
    Ответ написан
    Комментировать
  • Массив не передается полностью в функцию потока. Объясните в чем проблема?

    @res2001
    Developer, ex-admin
    Выход за границу массива тут:
    for(int i=0;i<s->m;i++){
    ...
       s->secondSortedArray[i]=num;
    }

    У вас количество элементов в обоих массивах 4, а m вы инициализируете 5. При последнем присваивании secondSortedArray происходит выход за границу массива, а т.к. после secondSortedArray в структуре идет m, то m у вас заменяется последним рандомным значением.
    В firstSortedArray то же есть выход за границу массива, но это не носит деструктивных последствий.
    Подобные вещи часто приводят к краху программы. Вы могли бы это отловить в отладчике. Пользуйтесь им. Отладчик - друг программиста! :-)
    Ответ написан
    4 комментария
  • Можно ли вывести список enum?

    @res2001
    Developer, ex-admin
    Можно с помощью такого Сишного подхода:
    // .h файл
    #define ENUM_MAP(XX) \
      XX(0, laborer, Laborer help msg) \
      XX(1, secretary, Secretary help msg)\
      XX(2, manager, Manager help msg)\
      XX(3, accountant, Accountant help msg)\
      XX(4, executive, Executive help msg)\
      XX(5, researcher, Resercher help msg)
    
    enum etype
    {
    #define XX(num, name, string) name = num,
      ENUM_MAP(XX)
    #undef XX
     };
    
    // .cpp файл, включающий предыдущий .h
    #define XX(num, name, string) #string,
    const char * enum_msg[] = [
      ENUM_MAP(XX)
    ]
    #undef XX

    Такими образом имеем массив enum_msg со строками из третьего параметра XX в ENUM_MAP.
    Набор параметров в XX можно варьировать как угодно.
    Подобная техника применяется, например, тут.
    Ответ написан
    Комментировать
  • В чем ошибка (работа с памятью, деструкторы)?

    @res2001
    Developer, ex-admin
    delete[] _coords;
    В таком виде в Dist создаются копии объектов с помощью конструктора копирования по умолчанию, т.е. просто побайтовое копирование. После завершения Dist память под coords в копиях освобождается. Когда завершается main() та же самая память будет освобождена еще раз, что приведет к ошибке.
    Поэтому в Dist передавайте ссылки!
    Ответ написан
    Комментировать
  • Кто может помочь с кодом visual?

    @res2001
    Developer, ex-admin
    Возможно в CRC.h (или где-то еще) объявлены функции возвращающими int, а в реализации они возвращают DWORD.
    Ответ написан
    Комментировать
  • Как сделать грамотную декомпозицию ООП?

    @res2001
    Developer, ex-admin
    Стек, конечно, можно делать и на массиве, но обычно его делают на списке.
    Для самого стека обычно хватает 1-2 структур/классов: Класс стека и класс узла стека.
    Для остальных можете придумать произвольную простейшую иерархию наследования, что бы объекты этих классов можно было укладывать в стек по ссылке/указателю на базовый класс.
    Модули это файлы:
    1. основной код - сюда запихнете main(), возможно какие-нибудь вспомогательные функции.
    2. и 3. стандартное разбиение С++ классов на заголовок (.h) и реализацию (.cpp).
    Т.к. классов не менее 5, то и заголовков и реализаций по уму делать на каждый класс, но в вашем случае можно все сложить в 2 файла. Хотя я бы сам стек выделил в отдельные "модули".
    Ответ написан