Задать вопрос
  • Как написать код в c++ который будет писать сообщения в документ?

    @res2001
    Все есть в стандартной библиотеке. Просто используете классы стандартной библиотеки для работы с файлами.
    Обладать нужно: текстовым редактором для написания исходного кода (редактор должен сохранять код в обычные текстовые файлы) и компилятором С++, в составе которого будет стандартная библиотека. На винде в качестве компилятора проще всего использовать MSVC или msys2+mingw, на линуксе - ставите из пакетов стандартный компилятор, обычно это gcc.
  • OpenVPN как шлюз не работает почему?

    @res2001
    dobromin, Если трафик ходит нормально между ВПН клиентом и ВПН сервером (т.е. когда это конечные точки трафика), значит с самим ВПН соединением все нормально.

    Посмотрел таблицу маршрутизации на винде (я так понял это клиент) - там маршрут по умолчанию - не через ВПН сервер. Соответственно, трафик в инет идет в обход ВПНа.

    Опция push "redirect–gateway def1 bypass–dhcp" на ВПН сервере включает маршрут по умолчанию на клиенте через ВПН. Опция push "route-gateway 10.10.0.1" лишняя, имхо.
    Если маршрут по умолчанию на клиенте не срабатывает, включайте лог на клиенте и смотрите какие сообщения туда сыпятся.
  • OpenVPN как шлюз не работает почему?

    @res2001
    dobromin, Тогда смотрите правила фаерволов на всех участниках цепочки прохождения пакетов, они могут блокировать. Может помочь tcpdump для определения того, что куда уходит и от куда не возвращается.
  • Как проверить если ли буква в массиве?

    @res2001
    KIberWarriorJs,
    я не могу понять как мне написать такой код

    Два вложенных цикла. В верхнем цикле меняешь индекс myString, во внутреннем цикле меняешь индекс letters. Индексы, естественно, разные.
  • OpenVPN как шлюз не работает почему?

    @res2001
    С ВПН сервера трафик от клиента куда должен идти? На роутер, а дальше в инет?
    Роутер что-нибудь знает о ВПН подсети? Надо на роутере добавить маршрут для ВПН подсети через ВПН сервер.
  • Как на обычном ПК сделать доступ по ссылке?

    @res2001
    Предложили как-то сделать адрес сайта через какой-то сервис

    Какой-то сервис называется, видимо, DDNS. Нужна поддержка DDNS на вашем сервере/роутере. Смысл в том, что при смене адреса, роутер сообщает об этом DDNS серверу, а тот уже, соответственно, начинает возвращать на DNS запросы обновленный адрес. Обычно в роутерах поддержка DDNS есть, в линукс/винду надо ставить какой-то дополнительный софт, не знаю какой. Поддержка DDNS нужна именно на устройстве, которое подключается к провайдеру и на котором меняется внешний адрес, обычно это роутер.
  • Как зациклить выполнение команды в bat если процесс отпадает?

    @res2001
    Что значит "процесс отпадает"?
    Судя по коду у вас все зациклено навечно. Оно вам точно надо?
    Я бы запускал через шедулер, там и расписание можно настроить.
    На вид в коде ошибок нет. Если путь, указанный в cd существует, то будет запускаться скрипт. Питон должен быть доступен для запуска из командной строки (путь к питону должен быть указан в PATH) под пользователем из-под которого запускается батник. В шедулере по умолчанию задания запускаются из-под LocalSystem, настройки PATH у него могут не совпадать с настройками пользователя под которым работаете вы.
  • Имитация ООП в C, где ошибка?

    @res2001
    При вызове виртуальных функций через макрос надо указатель приводить к нужному типу функции, т.к. в vtable будут лежать не типизированные указатели (void*).
    Так что типы для каждой виртуальной функции должны быть определены с помощью typedef.
    Так как имена виртуальных функций реально будут у макросов, сами виртуальные функции должны называться как-то по другому, ну там подчеркивание добавлять или еще что.

    В общем кода получается слишком много, чтоб этим серьезно заниматься :-)
    Обычно хватает легкого приближения к стилю ООП, без этих наворотов с наследованием и т.п.
  • Имитация ООП в C, где ошибка?

    @res2001
    Wataru, Не согласен:
    1. vtable нужен только для виртуальных функций, для обычных, не виртуальных, она не используется. Автор, по моему, еще не дошел до реализации наследования и полиморфизма, так что явно не думал об этом.
    2. таблица виртуальных функций создается в единственном экземпляре, она одна для всех экземпляров класса. В структуре класса хранится только указатель на нее.
    Вызовы виртуальных функций можно завернуть в макросы с тем же именем, что я предложил в прошлом сообщении, в макросе вызывать нужный метод через vtable.
    Как-то так вижу.
  • Имитация ООП в C, где ошибка?

    @res2001
    Я бы предложил вообще не делать указатель на функцию внутри структуры.
    Просто именуйте функции по определенной схеме с указанием названия класса в имени функции, например: ClassName_FunctionName.
    В таком подходе есть преимущество - избавляемся от коссвенности при вызове функции, т.е. вызов будет происходить чуть быстрее, чем с использованием указателя на функцию.
    Но передавать указатель на объект в функцию все равно придется :)
    На хабре есть на тему ООП на Си несколько статей, одна из них: https://habr.com/ru/post/568588/
  • Ошибка при установке windows?

    @res2001
    L1nw0od, Согласен с John Smith, стоит начать с теста памяти.
    На моей практике самые не понятные ошибки при установке винды связаны со сбоящей памятью (еще из-за дохнущего БП могут проявлятся разные чудеса, но обычно это на стационарных ПК).
    Я пользовался диагностическим набором от adminpe.ru, там мемтест есть в загрузочном меню, инструкция по изготовлению загрузочной флешки присутствует в наборе.

    И берите образ винды с сайта микрософт, а не с левых источников.
  • Как подключить библиотеку в плюсах?

    @res2001
    Вам точно это надо на для cmake? Я тут не увидел ваших попыток сделать подключение библиотеки в cmake.
    По моему ваш проект, в который вы хотите подключить библиотеку, не cmake.
    У меня винда и mingw-make. Хотелось бы поменьше всяких дополнительных пакетов и зависимостей. И чтобы сорцы либы лежали рядом относительно main.cpp, с возможностью их правки.

    Ну и положите их рядом и включите исходники библиотеки в перечень исходников вашего проекта. Пусть она собирается вместе с вашим проектом. Это такой самый деревянный вариант.

    Я бы конечно, попытался использовать пакетный менеджер для установки библиотеки в систему (Linux, msys2, ...), если она есть в пакетах. Если в пакетах нет, то можно собирать и устанавить библиотеку в систему согласно описанию и подключаете в проект обычным образом: добавить путь к файлам заголовков библиотеки с помощью ключа компилятора -I, добавить путь к каталогу с динамической библиотекой с помощью ключа компилятора -L, добавить в линковку библиотеку с помощью ключа компилятора -l, использовать #include в своих исходниках для подключения заголовков библиотеки.
  • Кодирование IP-пакетов в звук?

    @res2001
    WSGlebKavash, Направленная антенна с усилителем и 4G модемом. Покупаете готовый комплект, вам останется только повесить повыше и направить в нужную сторону.
    Обычно на выходе вы получаете Ethernet, но можно найти вариант, чтоб сразу WiFi раздавал.
  • Ошибка git при push?

    @res2001
    Какой версией git пользуетесь?
    Я использую git, установленный в msys2 с помощью тамошнего пакетного менеджера pacman. Полет нормальный.
    Там же можно установить и много чего еще, от линуксовых утилит и различных библиотек до mingw и clang. В общем, рекомендую.
    Все что установлено в msys2 может быть доступно из винды, достаточно добавить в переменную окружения PATH пути к msys2.

    Так же в винде можно установить WSL, поставить туда любой линукс, установить там git из пакетов и использовать его оттуда, но это немного сложнее и разнообразные IDE и т.п. утилиты с GUI, скорее всего, не смогут его использовать.
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    @res2001
    три действия оформить в виде перегрузок шаблона функции со SFINAE

    Это, конечно, добавит читаемости коду :-)
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    @res2001
    floppa322, Не знаю, почему бы и нет.
    Но даже, если этого не произойдет, то в случае обычного оператора присваивания сам оператор должен будет перед присваиванием выполнить действия аналогичные действиям деструктора (да еще будет дополнительно вызван деструктор временного объекта), а в случае присваивания перемещением просто вызовется деструктор временного объекта (в этом случае будет лишнее перемещение данных оригинального объекта во временный).
    Все говорит за то что явный вызов деструктора и размещающего new проще для понимания и эффективней.

    placement new - это замаскированный вызов конструктора на заданном участке памяти.
    Т.е. если расписать содержимое placement new, то будет что-то вроде:
    (reinterpret_cast<T *>(buffer))->T(args);
    В С++ явный вызов конструктора (как метод класса) запрещен, но в MSVS такое когда-то прокатывало и можно было обходится без placement new, как сейчас - не знаю.
  • Assignment operator VS Destructor + Placement new, где аргумент placement new - prvalue?

    @res2001
    Не знаю, на счет "хорошоей практики".
    Компилятор наверняка тут включит свои оптимизации и получится примерно одно и то же в обоих вариантах.
    Но вариант с оператором присваивания накладывает на объект дополнительные ограничения - у объекта должен быть реализован оператор присваивания, а лучше чтоб был оператор присваивания перемещением.

    Лично мне больше нравится вариант с явным вызовом деструктора и размещающего new, именно по тому, что тут все явно. Явное всегда лучше не явного.
  • Зависает намертво или дико начинает тормозит Ubuntu 20.04, как лечить?

    @res2001
    Немного другая ситуация - после выхода из скринсейвера после продолжительного времени не активности начинает дико лагать вплоть до полного коматоза. Если скринсейвер включается на краткое время, то восстанавливается без проблем. Скринсейвер дефолтный - blank screen.
    Пока руки не доходят посмотреть в логах, что происходит, но методом тыка обнаружил, что виноват firefox.
    Если его закрываю перед блокировкой, то просыпается нормально.