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

    @res2001
    Developer, ex-admin
    Когда вы объявляете указатель на объект, это не значит что у вас есть объект, у вас есть только указатель (в вашем случае он еще и не инициализированный, т.е. объекта точно нет).
    Указатель на что угодно - это просто адрес в памяти (т.е. это просто целое число).
    А вы в pMultComplex еще и обращаетесь к неинициализированному указателю.
    Аналогично и в некоторых других функциях.

    Вообще зачем вам столько вариаций умножения? Это какое-то извращение.
    Хватило бы operator* и operator*=.
    Можно еще упростить - сделать * через *=.

    Переопределять операции с указателями смысла нет - используйте ссылки.
    Ответ написан
  • Как конвертировать OpenCV Mat в Python ndarray?

    @res2001
    Developer, ex-admin
    Делал в свое время вычислительный модуль для питона на Си, из модуля передавал Си массивы в питон и там их отображал с помощью Matplotlib. В модуле реализовал питоновский Buffer Protocol. Дальше в питоне получал такой объект от модуля и с помощью numpy.asarray() перегонял его в ndarray.
    Если в основе Mat то же лежит обычный массив, то и для него можно реализовать Buffer Protocol похожим образом.
    Как это делать с python boost не в курсе, я использовал Python C API.

    Так же есть возможность непосредственно в модуле создавать numpy объекты, у numpy есть собственный numpy C API. Но с этим у меня опыта не было.

    Более простых вариантов у меня нет.
    Ответ написан
  • Как инициализировать изменяемый 2D массив char в struct C++?

    @res2001
    Developer, ex-admin
    Вот это работать не будет:
    wifi.access[0] = { ssid, password };
    Вам нужно явно делать пересылку памяти с помощью memcpy или strcpy для каждого элемента массива.

    Но лучше используйте вместо charов std::string.
    Ответ написан
  • Как Получить точное синхронное время в миллисекундах на множествах девайсах от rtc?

    @res2001
    Developer, ex-admin
    Раз речь идет о сетевых устройствах, то вам, видимо, нужна реализация NTP для вашего девайса и ОС. Посмотрите RFC 5905, может найдете, что-то готовое или реализуете сами. Собственно, возможно, реализовывать придется только транспортную часть, т.к. логику можно взять из уже существующего ПО.
    Ответ написан
  • Почему не работает перевод из 2 в 10 и обратно?

    @res2001
    Developer, ex-admin
    В DecBin() 2 ошибки:
    1. Вы заполняете строку с конца, а нужно с начала. Обратите внимание на вывод 173 (если не брать во внимание мусорный хвост, о котором в п.2) - ответ правильный, только записанный наоборот.
    2.После преобразования нужно добавить завершающий 0, т.к. на выходе у вас Си строка. Соответственно памяти нужно выделять на 1 байт больше необходимого. Из-за отсутствия завершающего нуля вывод не заканчивается в конце вашего буфера, а продолжает выводить содержимое памяти после буфера, пока не встретит нулевой байт, отсюда и мусор в конце.
    Можно и не добавлять нулевой байт, но в этом случае не нужно относится к возвращаемому DecBin() указателю как к строке, а работать с ним как с массивом байт. Т.е. выводить строго заданное количество байт.
    Ответ написан
  • Что это обозначает в коде С++?

    @res2001
    Developer, ex-admin
    edgeStruct x{}, tmp{};
    Определяет 2 переменные x и tmp типа edgeStruct с пустым списком инициализации.
    Ответ написан
  • Задача со стеками, в чем ошибка?

    @res2001
    Developer, ex-admin
    min и max у вас считаются нормально, но когда вы их находите вы очищаете стек: bus.pop();
    В итоге в третьем цикле, где вы находите imax и imin у вас пустой стек.
    Вам нужно в одном цикле объединить поиск min/max и imin/imax, к тому же это напрашивается само.
    Ответ написан
  • Как правильно подключить библиотеку в С++?

    @res2001
    Developer, ex-admin
    1.Библиотека должна быть установлена в систему, что бы cmake смог ее найти. Лучше всего использовать штатный менеджер пакетов ОС. Кроме библиотеки нужно еще ставить и dev пакеты для нее (это заголовки). dev пакеты нужны как раз для возможности собрать свой (или не свой) код, использующий библиотеку. В некоторых дистрибутивах линукс может и не быть dev пакетов. В винде их нет то же, для MSVS есть свой менеджер пакетов - vcpkg.

    2.Вы должны заставить cmake найти библиотеку, это делается командами find_package или find_library.
    find_package - более расширенная версия, но для нее нужен модуль поиска. Для многих популярных библиотек cmake содержит уже готовые модули. Искать их можете тут по Find<Имя библиотеки>. Для MySQL клиента готового модуля нет. Можно загуглить, я думаю, будет не трудно найти готовый модуль и использовать его в своем проекте.
    find_library - просто ищет библиотеку по стандартным путям. Но для сборки обычно этого мало, т.к. нужны еще заголовочные файлы и если пакетный менеджер ставит их в специфические пути, то они будут не доступны. Поэтому лучше использовать find_package - он ищет все.

    3.Добавить путь к заголовочным файлам библиотеки к проекту с помощью команды: target_include_directories
    Переменная, содержащая путь должна быть определена в п.2 (либо вы задаете путь вручную)

    4.Добавить библиотеку в список линковки с помощью команды: target_link_libraries
    Аналогично нужно использовать переменные, которые будут определены в п.2.

    В этом процессе есть разные нюансы, которые могут влиять на используемые средства, например что делать если библиотеки нет в репозитории ОС или она распространяется только в виде исходников.

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

    Все это можно сделать и руками задав для компилятора нужные опции с помощью add_compile_options и add_link_options - но это приведет к тому, что скорее всего на другом компьютере или в другой ОС вам придется править cmakelist.txt для сборки.
    Ответ написан
  • Как сделать модуляцию звука?

    @res2001
    Developer, ex-admin
    Т.е. вы хотите низкочастотный звук перенести в высокие частоты?
    Перенести можно, но вряд ли из этого выйдет что-то удобоваримое
    В теории это так.
    Можно попробовать что-нибудь типа такого:
    1.Делаем ДПФ
    2.Добавляем между первым и вторым отсчетами результата ДПФ столько нулей, сколько необходимо для достижения новой частоты дискретизации. Не забываем про вторую половину спектра.
    3.Делаем обратный ДПФ
    Не знаю, что получится :-) это немного измененный алгоритм интерполяции через ДПФ. Там нулевые отсчеты добавляются в конец (поэтому сдвига спектра не происходит).
    Делать надо, видимо, небольшими временными отрезками (0.5 - 1 секунда), затем результат складывать. Возможно надо будет брать сигнал с перекрытием. Но не факт, у меня не было опыта работы с речевыми сигналами.
    Чтоб реализовать даже мой простой алгоритм надо немного понимать как все это работает.
    Ответ написан
  • Установка cURL на CodeBlocks на MinGW на Windows?

    @res2001
    Developer, ex-admin
    Установите msys2 - это оболочка для mingw со своим менеджером пакетов.
    Любой имеющийся в репах пакет устанавливается так же как в линуксе - одной командой.
    В msys2 можно установить одновременно и 32 битный и 64 битный mingw, а так же clang.
    mingw установленный в msys2 легко прикручивается к любой IDE.
    Ответ написан
  • Дана таблица с пояснением синтаксиса NAL unit'a. Как её трактовать?

    @res2001
    Developer, ex-admin
    Стандарт.
    next_bits( n ) описана чуть выше таблиц:
    next_bits( n ) provides the next bits in the bitstream for comparison purposes, without advancing the bitstream pointer. Provides a look at the next n bits in the bitstream with n being its argument. When used within the byte stream format as specified in Annex B and fewer than n bits remain within the byte stream, next_bits( n ) returns a value of 0.

    next_bits( n ) - возвращает следующие n битов в битовом потоке.

    nal_unit() и nal_unit_header() не функции - это такое описание структур, когда сама структура имеет плавающий размер, зависящий от параметров.
    nal_unit_header() - не зависит ни от чего и ее размер фиксирован.
    nal_unit() зависит от NumBytesInNalUnit, этот параметр должен быть заранее известен. Например он может быть протчен ранее из того же битового потока или задается другим способом.
    В цикле вычисляется размер массива rbsp_byte.
    В разделе 7.4 таблицы описываются словами.
    Ответ написан
  • Как настроить сокеты беркли на разрыв соединения через определенное время?

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

    @res2001
    Developer, ex-admin
    Уже в который раз вижу ваши одинаковые посты, вроде ответы были, но похоже не помогает.

    1.У вас ошибка в реализации. Нужно так:
    for (int i = 0; i < SIZE-1; i++) 
      { 
          min = i;                                           // индекс минимального элемента
          for (int j = i+1; j < SIZE; j++)
          {
                    comparison++;                                  // инкремент сравнений
              if (array[j] < array[min])                     // если текущий элемент меньше минимального 
                    {           
             min = j;                                        // запоминаю его индекс
                    }                  
                }
          temp = array[i];                                     //
          array[i] = array[min];                             // меняю их местами
          array[min] = temp;                                 //
          transfer++;						  // инкремент пересылок
      }

    Привел только тело цикла.
    Вот тут показана правильная реализация
    2.Количество сравнений и пересылок для этого алгоритма легко определяется аналитически (не надо ничего считать в самом алгоритме):
    2.1. Количество сравнений находится по формуле суммы n первых членов арифметической прогрессии: Sn = (a1+an)/2*n. Где a1 = 1, an = SIZE-1, n = SIZE-1
    2.2. Количество пересылок всегда равно SIZE-1
    Ответ написан
  • Как получить доступ к структуре внутри функции?

    @res2001
    Developer, ex-admin
    Получайте сначала заголовок, на его основании динамически выделяйте нужное количество памяти и передавайте буфер в функцию для приема. Можете использовать std::vector для массивов.
    Ответ написан
  • Можно ли связать код Си(c++) и Python?

    @res2001
    Developer, ex-admin
    У Бизли есть неплохое введение в написание модулей на Си. Можете начать с него, а за деталями в родную документацию.
    Раз вы собрались рисовать графики, то, видимо нужно передавать в питон большие массивы данных.
    Для этого можно реализовать в модуле buffer protocol. numpy умеет работать с такими массивами.
    Так же можно создавать в модуле сразу массивы numpy, для этого надо использовать Numpy C API.
    Ответ написан
  • Какой компилятор C++ выбрать?

    @res2001
    Developer, ex-admin
    У Микрософт есть компилятор отдельно от VS, продукт называется - Build Tools for Visual Studio. Не смотря на то что он "for Visual Studio", но его можно поставить отдельно и собирать проекты.
    На счет того что выбрать - для винды микрософтовский компилятор. Как вариант mingw, но msvc лучше, имхо.
    Для никсов - gcc, clang и проч.
    Ответ написан
  • В чем проблема в коде?

    @res2001
    Developer, ex-admin
    На сколько я понимаю, у вас в GetRandomMassive() массив randommassive[] заполняется значениями min_ и max_-5, хотя подразумевалось, что там будут некие случайные числа.
    Ответ написан
  • Зависает проект на 73% ошибка в c++ как исправить?

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

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

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

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