Ответы пользователя по тегу C++
  • С++ хочет открыть библиотеку которой нет, что делать?

    @res2001
    Developer, ex-admin
    Дать компилятору эту библиотеку, иначе не соберется проект.
    Ответ написан
  • Какие существуют методы PIC в Windows?

    @res2001
    Developer, ex-admin
    У вас дочерние процессы висят на system("pause"); и не завершаются самостоятельно.
    Просто удалите эту команду в дочках, оставьте только в главном процессе и не надо будет ничего мутить с CTRL_BREAK.
    Ответ написан
  • Как запустить exe ве Qt Creator??

    @res2001
    Developer, ex-admin
    1.Если по тупому, то запускайте софтину, она будет ругаться на отсутствие библиотеки, эту библиотеку ищите в недрах mingw копируете в каталог с исполняемым файлом. Повторяете процедуру до тех пор пока софтина не перестанет ругаться на отсутствие библиотек.

    2.Чуть по технологичнее: берете dependency walker открываете им ваш исполняемый файл, смотрите от каких библиотек он зависит (в глубину то же нужно смотреть, а не только первый уровень) ищите и копируете библиотеки аналогично п.1.

    3.По умному: прописываете путь mingw/bin в переменной окружения PATH и наслаждаетесь. При этом ничего копировать не придется.
    Но если вы задумаете распространять ваш софт другим людям, это не избавит вас от необходимости устранять зависимости, т.е. вы все равно должны будете либо собрать все библиотеки в одном каталоге с исполняемым файлом, либо обязать пользователя устанавливать mingw и прописывать его путь в переменную PATH.
    Ответ написан
    1 комментарий
  • Как использовать сторонние C++ библиотеки в Visual Code на Linux?

    @res2001
    Developer, ex-admin
    Не зависимо в какой ОС вы работает и какой IDE пользуетесь схема одна и та же:
    1. Для того что бы в своих исходниках вы могли использовать вызовы сторонней библиотеки вы должны включить заголовочные файлы библиотеки с помощью директивы #include.
    2.Чтоб компилятор смог откомпилировать ваш код вы должны задать ему место расположение заголовочных файлов сторонней библиотеки с помощью опции -I компилятора. В линуксе, если библиотека установлена штатным пакетным менеджером, возможно это не потребуется, т.к. заголовочные файлы будут доступны по стандартным путям поиска заголовочных файлов.
    3.Чтоб линковщик смог собрать исполняемый файл вы должны указать ему путь и имя двоичных файлов библиотеки с помощью опции -L и -l. Опять же в линуксе, возможно, путь (-L) указывать не потребуется (см.п.2), только имя библиотеки (-l).
    4.Если библиотека установлена не в стандартные каталоги, то загрузчик исполняемых файлов может ее не найти. Чтоб это исправить возможно потребуется запустить утилиту ldconfig или даже добавить каталог библиотеки в конфигурационный файл ldconfig. Как вариант добавить в переменную окружения LD_LIBRARY_PATH путь к библиотечным бинарным файлам перед запуском программы.
    В винде ldconfig нет - библиотечные файлы должны быть либо в каталоге где лежит исполняемый файл программы, либо в одном из путей, заданных в переменной окружения PATH.

    Когда вы запускаете сборку в IDE, то обычно опции компилятора из пп.1-3 вы должны указывать в свойствах проекта.
    Ответ написан
    3 комментария
  • Как изменить путь определения библиотек с 64 на 32 бита?

    @res2001
    Developer, ex-admin
    Задать дополнительный каталог для поиска библиотеки можно с помощью опции компилятора:
    -L <новый путь к библиотекам>
    Ответ написан
    Комментировать
  • Как сделать чтобы прога водила минимальное?

    @res2001
    Developer, ex-admin
    Вы слишком перемудрили. Привожу только цикл вычисления минимума по диагонали:
    min = a[0][0];
    for (p=1;p<n && p<m;p++) {
           if (a[p][p]<min) {
              min=a[p][p];
           }
    }
    printf("%5d\n",min);
    Ответ написан
    Комментировать
  • Почему не выводится ничего из функции?

    @res2001
    Developer, ex-admin
    Как минимум потому что у вас в примере N = 3, а в obrabotka() первый цикл объявлен так:
    for(k = 0; k < (N - 3); k++)
    т.е. ни одной итерации цикла при таких начальных условиях не будет.

    PS: Все остальное не проверял.
    Ответ написан
  • Как определить протокол без привязки к порту?

    @res2001
    Developer, ex-admin
    И FTP и POP3, а так же SMTP, IMAP и многие другие являются текстовыми протоколами, там так же можно определить протокол по содержимому пакета.
    В двоичных протоколах такой метод то же может работать, только анализировать нужно уже двоичную информацию, а не текстовую.
    В любом случае для анализа нужно знать сам протокол хоть текстовый, хоть двоичный.
    Но, конечно, не все так можно определить. Например, если любой из протоколов спрятан за SSL, то снаружи вы увидите шифрованный трафик, а что внутри без расшифровки понять уже не возможно.

    Кроме того определение протокола по номеру порта - так себе идея, т.к., наверное, любой сервер поддерживает возможность смены порта.
    Ответ написан
    Комментировать
  • Возможно ли использовать Visual Studio 2017(для c++) как portalbe?

    @res2001
    Developer, ex-admin
    Eclipse работает автономно, есть сборки со встроенной JRE, в этом случае и ява не нужна на компе.
    Но с компилятором могут быть проблемы - в эклипсе (да и в остальных IDE) нет своего компилятора.
    Обычно под виндой используется MSVC или mingw.
    MSVC скорее всего так же нельзя сделать переносимым.
    mingw - можно. Но что бы использовать его в Eclipse нужно настраивать переменные окружения винды. Это можно сделать запуская Eclipse из батника, в котором сначала устанавливаются значения для нужных переменных окружения и только потом запускается IDE.
    С другими IDE, думаю, схема будет примерно такая же.
    Ответ написан
    Комментировать
  • Как развиваться дальше и где черпать идеи/задачи?

    @res2001
    Developer, ex-admin
    Идите либо работать с тем, что умеете, там вам дадут задачи, либо учиться в универ, если еще там не были, там то же чем-нибудь нагрузят мозг.

    PS: на плюсах можно выполнять практически все прикладные задачи, гораздо больше, чем на питоне или java. Но часто трудозатраты будут выше, чем с использованием специализированных языков.
    С/С++ обычно используются там где нужна скорость, недостижимая на других ЯП, или для работы с оборудованием на низком уровне.
    Ответ написан
    Комментировать
  • Как сделать ввод русского текста через оператор std::cin нормальным и без крякозябр?

    @res2001
    Developer, ex-admin
    Если делать по уму, то вам нужно:
    1.Исходники сохранять в UTF8. Для строк и строковых констант использовать wchar_t или wstring.
    2.При старте программы узнайте кодировку консоли
    3.Перед выводом строк на экран преобразуйте ваши широкие строки в кодировку консоли и только после этого выводите. Для

    В винде 2 русских кодировки консоли: cp1251 и cp866, при чем cp866 используется по умолчанию. Менять кодировку консоли можно из самой консоли командой chcp. Менять кодировку консоли из программы - дурной тон.
    Пример конвертации с помощью WinAPI можете посмотреть тут.
    Ответ написан
    3 комментария
  • Как определить, что утекает память? Как получить размер памяти, занимаемой экземпляром класса?

    @res2001
    Developer, ex-admin
    1.Кроме бесплатного valgrind, есть еще intel vtune работает на порядок быстрее, но стоит денег.
    2.sizeof(). Но он выдаст размер только внутренних членов данных класса. Если у вас в классе дополнительно выделяется динамическая память, то sizeof это не учтет. Кроме вас никто не знает сколько памяти жрет класс и как ее правильно посчитать.
    Ответ написан
  • C++ ошибка при выполнении программы, как ее исправить?

    @res2001
    Developer, ex-admin
    Из-за того что в первом и втором цикле условия разные, у вас выделяется массив строк (a[]) меньшего размера, чем происходит к нему обращений во втором цикле. Отсюда - выход за границы массива и сбой программы.
    Ответ написан
    Комментировать
  • Почему я не могу обработать ответ сервера?

    @res2001
    Developer, ex-admin
    Никогда не работал с ардуино и с этой библиотекой, но принципы везде одни и те же.
    1.Обычно, когда получаете данные по сети, то получаете не строку с завершающим нулем, а байтовый массив с длинной. Уточните в документации, что именно возвращает tcpReply().
    2.При передаче данных по сети нет гарантии, что вы получите за один вызов функции чтения всю переданную информацию. Обычно либо передают в начале размер последующих данных, либо данные должны заканчиваться определенным значением и чтение из потока производится до получения этого значения.

    Если tcpReply() возвращает строку с завершающим нулем, то преобразовать ее в String можно просто передав ее в конструктор:
    String data(reply);
    Ответ написан
    Комментировать
  • Как sizeof вычисляет размер массива?

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

    Статический массив - это не указатель. Указатель - на этапе выполнения занимает в памяти место для хранения адреса. Статический массив занимает в памяти место для хранения данных массива.
    Поэтому статический массив - это не указатель. Хотя часто компилятор работает с именем статического массива как с указателем.
    Ответ написан
    8 комментариев
  • Как непрерывно читать данные по Serial Port?

    @res2001
    Developer, ex-admin
    Видимо нужно, что бы this->serialPort1->IsOpen постоянно была true, либо изменить условие в while().
    Ответ написан
  • Libxl: Как запустить на windows 7?

    @res2001
    Developer, ex-admin
    Укажите компилятору соответствующей опцией где искать h файлы.
    make, gcc и прочие линуксовые утилиты сборки есть в msys2/mingw.
    Ответ написан
  • В чём преимущество функций над методами контейнеров?

    @res2001
    Developer, ex-admin
    Каких-то особых преимуществ нет. Просто альтернативный вариант.
    Это шаблонная функция, может принимать любой из стандартных контейнеров std, она просто вызывает obj.size() внутри.
    Чем хотите, тем и пользуйтесь.
    https://en.cppreference.com/w/cpp/iterator/size
    Ответ написан
    Комментировать