• Почему возникает проблема?

    alxndrlsn
    @alxndrlsn
    Инженер
    Поисковик по запросу, выделенному жирным шрифтом, много чего выдает, но понравился вот этот ответ:
    Сообщение undefined reference to значит, что компилятор функцию знает, но линкер не догадывается, где она валяется. Для исправления надо включить в проект файлы с телами всех используемых версий всех функций. Если функции библиотечные, то это делается подключением lib файлов, или со статическими библиотеками, или с библиотеками импорта в зависимости от того, валяются ли функции в lib, или в dll. В том числе это относится к своим библиотекам. В остальных случаях добавить в проект файлы с исходниками тел функций. Где именно они будут валяться - дело 128-е, но пихать их в голову - плохая идея.(с) сайбер-форум


    Дословно разбирая ошибку, читается примерно следующее:
    Сообщает компилятор: obj/x64/Debug/Color.o: в функции std::__cxx11::basic_string, std::allocator >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) найдено нечто:
    в файле Color.cpp: .text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm[_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm]+0x24a): не определилась ссылка на std::__cxx11::basic_string, std::allocator >::_M_replace_cold(char*, unsigned long, char const*, unsigned long, unsigned long)
    Предположу, что речь идет о том, что вместо ожидаемого метода _M_replace(ulong, ulong, char const*, ulong) был вызван нигде неопределенный метод _M_replace(char*, ulong, ulong, char const*, ulong)..., то есть кто-то указал лишний аргумент и никак это не обосновал.
    Поправьте, если не так.
    Ответ написан
  • Где ошибка в коде?

    alxndrlsn
    @alxndrlsn
    Инженер
    Смею предположить, что переменную цикла следует инициализировать стандартным способом:
    ...
     for (double x=xn; x <= xk; x += dx) {
            if (x >= log(b))  {
                y = pow(log(a * x), 3.0) / ((sqrt(b * x)) + 1.2);
                cout << format(table_format, x, y, "x >= log(b)");
            
            } else {
                y = pow(tan(a * x), 2.0) + sqrt(exp(b * x));
                cout << format(table_format, x, y, "x<log(b)");
            }
        }
    ...


    п.с. В различных вычислениях необходимо напоминать машине, что она работает с double, кроме того, лучше сразу указать double константу, нежели полагаться на встроенные преобразования из int в double. При работе с pow эмпирически обнаружил, что требование указывать степень в double формате лучше удовлетворять сразу, иначе может неправильно посчитать почему-то.

    п.п.с. лишние скобки не нужны никому, а else смотрится эстетичней.

    updated: ответ обнаружился на графике (см. в комментариях) - на интервале от 0 до ln(17.8) значения функции зашкаливают...
    Ответ написан
    3 комментария
  • По какой причине здесь возникает ошибка?

    alxndrlsn
    @alxndrlsn
    Инженер
    Смею предположить, что проблема в кодировке, точнее в подходе к программированию: компиляторы, насколько мне известно, несколько консервативны...
    Ответ написан
    Комментировать
  • При подключении SATA кабеля к жесткому диску через USB, синий индикатор на разъеме кабеля гаснет?

    alxndrlsn
    @alxndrlsn
    Инженер
    риторически: было время, когда внешние диски подключались раздвоенным USB кабелем...
    Ответ написан
    Комментировать
  • Как можно быть уверенным что вирус не заразил основную винду?

    alxndrlsn
    @alxndrlsn
    Инженер
    Если у Вас основная система Linux-подобная, а виртуальная - Windows с песочницей, то можете быть на 99,99(9)% быть уверены, что основная система не пострадает.
    Ответ написан
    Комментировать
  • Как убить такую заразу? Крутит левые сайты в моём браузере.?

    alxndrlsn
    @alxndrlsn
    Инженер
    Браузер - первая линия обороны, обязательно нужен Adguard или аналогичный трудяга, чтобы не было потом обидно за случайно нажатую во время прогрузки контента страницы (как правило форумы пестрят такими ловушками) кнопку.

    наверняка есть что то в appdata, вычищайте руками, исходя из того что найдет drweb
    вот здесь может пригодится Far или Total Commander - "квадратиш, практиш, гут".

    п.с. кстати, перед лечением любого вируса, по идее, надо бы отключать систему создания резервных точек... а чтобы не было страшно за возможную утрату "всего и вся", надо не лениться и регулярно создавать перезаписываемую резервную копию (всего один файл) предположительно чистой Windows с помощью Acronis True Image.
    Ответ написан
    Комментировать
  • Какой компилятор выбрать для C++?

    alxndrlsn
    @alxndrlsn
    Инженер
    Нам руководитель указал на GCC, обосновав это какой-то фразой, смысл которой в том, что не придется гемороиться с лицензиями и платить сторонним дядям, но я не проверял - просто доверился и пользуюсь GCC для С++17 под Debian 11. Так уж получилось, и менять что-то пока нет времени и желания.
    Ответ написан
  • Каким инструментом лучше организовать работу с IP-камерами на Qt?

    alxndrlsn
    @alxndrlsn Автор вопроса
    Инженер
    Все встало на свои места неожиданно: слегка разочаровавшись в QCamera, а также обнаружив, что ffserver больше не поддерживается с июля 2016 года,..

    July 10th, 2016, ffserver program being dropped(с)ffmpeg.орг/индекс.html#ffserver

    ..смотрел похожие классы и через QVideoWidget вышел на QMediaPlayer, который, начиная с версии Qt 5.12.2, позволяет использовать gst-pipeline при установленном GStreamer. Иными словами, в методе QMediaPlayer::setMedia(QMediaContent) можно вставить строку QUrl, содержащую обычную команду для gstreamer:
    что-то вроде этого (просто для примера):
    player->setMedia(QUrl(gst-pipeline: rtspsrc location=rtsp://user:passwrd@StaticCameraIP:port/path ! rtph264depay !  h264parse ! omxh264dec ! nvvidconv ! video/x-raw, width=1920, height=1080, format=BGRx ! videoconvert !  ximagesink sync=false));

    Работает хорошо, однако проверял в условиях цейтнота, поэтому столкнувшись с некоторым непонятным моментом, не нашел пока: как бороться с тем, что поток открывается в совершенно новом окне, игнорируя вызванный ранее QMediaPlayer::setVideoOutput(QVideoWidget). Возможно это потому, что у меня экземпляр QMediaPlayer не является дочерним по отношению к QVideoWidget. Но главное - работает!
    Ответ написан
    Комментировать
  • Откуда взять vswhere для boost?

    alxndrlsn
    @alxndrlsn
    Инженер
    Та же проблема возникла, поскольку у меня под Windows7 Sp1 x64 нет "любимой" BOOST'ом MS Visual Studio IDE, а вместо MinGW и Cygwin у меня установлен более понравившийся мне TDM-GCC-64 (потому что он единственный нормально установился и заработал в паре с CodeLite IDE).

    После прочтения "Getting started on Windows" с напутственным пожеланием в конце "весело провести время"(Onward: "Good luck, and have fun!"—the Boost Developers) всё стало ясно... Разрабы не посчитали нужным разжёвывать всем и каждому "как собирать буст". Это их право.

    Итак, радуйтесь, ибо я "весело провел время" вместо вас! Начнём с того, что установим глобальную переменную BOOST_ROOT=C:\моя директория\boost_1_75_0, указывающую на каталог, куда мы распаковали архив, скачанный с официального сайта. Теперь открываем для редактирования в блокноте или с помощью Far (или TotalComander) исполняемый файл bootstrap.bat и заменим в строке SET TOOLSET=msvc, значение "тулсета" на gcc, после чего, поднявшись выше, допишем эти же три буквы в команду call .\build.bat gcc (те, кто перелопатил множество исполняемых файлов в субдиректориях "буста", наверное заметили, что в процедурах build.bat ожидается какая-то опция для дальнейшей сборки... именно её мы и указываем, хотя это было совсем не очевидно). Далее, запускаем через CMD или Far (TC) сохраненный bootstrap.bat и вуа-ля, наблюдаем: Using 'gcc' toolset. ... Bootstrapping is done. To build, run: .\b2 и т.д. и т.п. Радуемся!

    Осталось в соответствии все с теми же инструкциями "Getting started on Windows" (полезно ознакомиться) с помощью утилиты b2.exe собрать требующие сборки библиотеки.., потому что остальные, как оказалось не требуют сборки и могут быть использованы прямо из каталога, на который мы установили глобальную ссылку.

    п.с. Тем, кто хочет обойти усыпанное граблями поле с портированием nix-компиляторов под Windows и избавить себя от нетривиальной настройки понравившейся IDE, рекомендую поставить любую актуальную Ubuntu (или подобную, например, Mint), и, пользуясь многочисленными толковыми руководствами, установить через терминал QT Creator, "буст" и прочее необходимое, после чего поскорее приступить к изучению С++ в паре с QT. Всем успехов! Радоваться!
    Ответ написан
    2 комментария