Ответы пользователя по тегу C++
  • Не работает код?

    @res2001
    Developer, ex-admin
    У вас GetRefStrict должна возвращать ссылку, а вы возвращаете указатель.
    return *res;
    Ответ написан
    Комментировать
  • Клиент-серверное приложение?

    @res2001
    Developer, ex-admin
    Прежде чем писать сетевое приложение вы бы немного почитали про то как там все работает, какие могут быть трудности и как их можно обходить.
    Если вы до сих пор этого не знаете, то сервер на одном слушающем сокете может работать с кучей клиентов. Если вы используете TCP для обмена, то на каждое соединение с новым клиентом создается новый сокет полноценный сокет. Вы можете этот сокет передать процессу обработчику. Тогда вам не понадобится куча слушающих сокетов.

    Не стоит запускать на каждого клиента отдельный вычислительный процесс, если вычисления достаточно ресурсоемкие вы парой десятков клиентов обеспечите DDoS на свой сервер, т.е. ваш сервер может просто умрететь под нагрузкой.
    Ответ написан
  • Почему не выводятся русские символы?

    @res2001
    Developer, ex-admin
    Видимо речь идет о Винде и проекте в MSVS.
    Конретно описанная проблема, видимо, в том, что программа скомпилирована с поддержкой UTF8. Попробуйте в настройках проетка выключить поддержку UTF8 и пересобрать программу.
    Но в винде вывод русских букв в консоль достаточно не тривиальная задача. Тут эта тема уже много раз обсуждалась. Полезно хотя бы иметь представление о вопросе. Можете начать отсюда и прочитайте комменты к статье.
    Ответ написан
    Комментировать
  • Как отправить сообщение с шифрование SSL/TLS в Winsock2?

    @res2001
    Developer, ex-admin
    Используйте openssl или аналогичные библиотеки.
    Ответ написан
    4 комментария
  • C++ Builder. Аналог REG DELETE в CMD. Как удалить ветку реестра?

    @res2001
    Developer, ex-admin
    Используйте WinAPI для работы с реестром: https://docs.microsoft.com/en-us/windows/win32/sys...
    Ответ написан
    Комментировать
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Developer, ex-admin
    Конечно же в target_link_libraries, просто добавьте имя библиотеки в конце через пробел
    Но обычно используют find_package/find_library/pkg_check_modules для того, что бы предварительно определить установлена ли библиотека в системе. А в target_link_libraries добавляют переменные, которые инициализируются этими функциями.
    Смотрите: https://cmake.org/cmake/help/latest/genindex.html
    Ответ написан
    7 комментариев
  • Почему ругается Visual Studio c++?

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

    Вот что по поводу этой ошибки пишут в микрософте.
    Описание то же не особо помогает.
    Попробуй сделать n статической. Или определи как define.
    Ответ написан
    3 комментария
  • Как создать свой аналог cout на голом C++?

    @res2001
    Developer, ex-admin
    Вы хотите именно самостоятельно реализовать или задача не использовать стандартную библиотеку?
    Если самостоятельно, то для начала изучите https://en.cppreference.com/w/cpp/header/cstdarg
    и все что связано с функциями с переменным числом аргументов.

    Если второе то, это значит, что вы должны использовать функции предоставляемые ОС. Для Windows это WinAPI, для Линукс - POSIX.
    В винде уже есть готовые варианты - функции семейства StringCbPrintf.
    В Линукс ... ну тут все равно от стандартной библиотеки ни куда не уйти :), т.к. это часть ОС и POSIX.
    Ответ написан
    7 комментариев
  • Как передавать много сообщений через Socket?

    @res2001
    Developer, ex-admin
    Для передачи вы видимо используете TCP. В ТСР нет разделения на сообщения, все данные передаются в одном потоке в том порядке, в котором были отправлены. Т.е. вполне реальна ситуация, когда вы посылаете например 2 сообщения по 10 байт каждое, а читает 3 раза по 5, 10, 5 байт за раз. Таким образом разделять на сообщения вы должны на принимающей стороне самостоятельно.
    РОСО тут не причем - эменно так работает протокол ТРС. Вместо TCP можете использовать UDP - тут будете принимать именно сообщениями. Но есть сложность с дефрагментацией - если размер сообщения больше MTU, то сообщение будет фрагментировано при передаче и не факт, что куски дойдут и соберуться. Ну и еще UDP не гарантирует доставку, т.е. сообщения могут теряться и ни получатель ни отправитель об этом не узнает.
    Так же можно использовать протокол SCTP, он так же как UDP работает с сообщениями, но при этом гарантирует доставку. SCTP входит в стандартный стек TCP/IP. Есть ли его поддержка в POCO я не в курсе.
    Ответ написан
    Комментировать
  • Есть ли книги по winapi / c++?

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

    @res2001
    Developer, ex-admin
    А что в плюсах уже стандартный std::sort перестал работать?
    Зачем вы пишете собственную сортировку пузырьком? Лучше чем в std вряд ли получится.
    Но учитывая, что
    Размер файла может быть достаточно большим для загрузки всех данных в память одновременно

    Нужно файл делить на несколько частей, помещающихся в память, каждую часть сортировать отдельно тем же std:sort, результаты сохранять в промежуточный файл. Затем результаты объединять с помощью сортировки слиянием.
    Ответ написан
    Комментировать
  • Почему переноситься на следующую строку?

    @res2001
    Developer, ex-admin
    Тут нет кода вывода на экран.
    Возможно ctime() возвращает строку включающую CRLF.
    Запустите под отладчиком, поставив точку останова после присваивания timee и посмотрите есть в ее содержимом CRLF. Так же можно поставить снифер, перехватить генерируемый трафик и посмотреть есть ли CRLF в пересылаемой информации.
    Если таким образом не найдете CRLF - значит проблема при выводе на экран.
    Ответ написан
    Комментировать
  • Как правильно работать с русскими символами в C++?

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

    @res2001
    Developer, ex-admin
    Работает в Си так же как в С++.
    Тут надо немного теории:
    Как мы обычно индексируем массив: array[2]
    Компилятор это дело приводит к виду: *(array + 2)
    А теперь, что будет если написать вот так: *(2 + array)?
    Все нормально будет, результат тот же. При этом такое выражение, если переписать в индексном виде будет иметь вид: 2[array]
    Все остальное в приведенном варианте printf - декорация для запудривания мозгов - обычная операция ,
    Ответ написан
    Комментировать
  • Как использовать принятый двумерный массив из функции?

    @res2001
    Developer, ex-admin
    Массив Т в transposeMatric - это локальная переменная, вы пытаетесь вернуть указатель на локальную переменную. После выхода из функции все локальные переменные уничтожаются.
    На что будет указывать возвращенный указатель? - на какое-то место в стеке, где ранее была правильная переменная, а сейчас может находится все что угодно.
    В вашем случае Т надо выделять динамически или возвращать массив по значению.
    Ну и
    return *T;
    вернет T[0][0], а не то что вы, видимо, хотите.
    Крометого вы не правильно используете Т в main(). Объявив его как указатель:
    double *T;
    вы не сообщаете компилятору о размерности массива Т, поэтому индексация массива T[i][j] не может быть выполнена.
    Раз уж вы все равно пишете на С++, то используйте std::vector для передачи и возвращения массива.
    Ответ написан
    Комментировать
  • Как можно оптимизировать?

    @res2001
    Developer, ex-admin
    Это узкое место в вашей программе? Что-то не верится. Оптимизация не нужна.
    Ответ написан
    Комментировать
  • VC++ 2010 не даёт описать переменную в середине блока - ограничение Express-версии?

    @res2001
    Developer, ex-admin
    Посмотрите в настройках проекта какая версия языка используется.
    Не скажу на вскидку какие версии поддерживает cl от VS2010, в VS2017 за это отвечает опция /std. В VC2017 эта опция находится в Configuration Properties -> C/C++ -> Language -> C++ Language Standard
    Поведение, которое вы описываете, характерно для лохматых версий Си.
    Микрософт официально не поддерживает стандарты языка Си в своем компиляторе (хотя стандарты частично реализуются), поэтому в опциях компилятора нельзя это задать.
    Если задать опцию /TP, то все файлы исходного кода будут компилироваться как С++ код, не зависимо от расширения файла. По умолчанию, если расширение .c - компилируется как Си код. Возможно эта опция поможет избавиться от ошибки, но есть шанс появления других ошибок. В VC2017 эта опция находится в Configuration Properties -> C/C++ -> Advanced -> Compile As

    PS: номер и текст ошибки то же было бы не плохо сюда запостить.
    Ответ написан
  • Код сравнение длительности звуков c++?

    @res2001
    Developer, ex-admin
    Нужно знать частоту дискретизации и количество отсчетов в выборке.
    Частота дискретизации - это количество отсчетов за 1 секунду. Соответственно, длительность звучания в секундах находится: количество отсчетов / частоту дискретизации.
    Ответ написан
    Комментировать
  • Как скомпилировать и запустить файл cpp из другого файла cpp?

    @res2001
    Developer, ex-admin
    Очевидно - запускать отдельным процессом компилятор с соответствующими параметрами, анализировать ошибки функции старта процесса, ждать завершения процесса компиляции и анализировать код возврата. Так же можно (нужно) перехватывать stdout и stderr и анализировать сообщения компилятора (или просто выводить пользователю).
    Ответ написан
  • Как использовать одну переменную в разных программах?

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

    Напрямую вы сможете использовать 1 переменную в разных программах только используя механизм shared memory ОС и разместив переменную в "расшаренном" участке памяти. В этом случае для синхронизации доступа к переменной в разных процессах вам необходимо будет использовать какие-либо именованные примитивы синхронизации, иначе будет состояние гонки и доверять содержимому переменной в этом случае будет нельзя.

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

    На самом деле нужно знать задачу, чтоб выбрать наиболее правильный вариант реализации.
    Ответ написан
    Комментировать