Задать вопрос
  • Как создать массив списков C++?

    @MarkusD Куратор тега C++
    fachel32, тебе надо единожды задать длину списка или длина может варьироваться в процессе исполнения программы?
  • OpenGL не сразу отображает данные из кадрового буфера?

    @MarkusD Куратор тега C++
    Герман, так а у тебя там проблема с логикой.
    Окно у тебя перерисовывается раз в секунду. Это стоило бы стразу подметить.
    А перерисовывается оно у тебя так потому что ты неправильным образом и в неправильном месте указал рандомизацию.
    srand((unsigned)time(NULL)); - в течении секунды твое зерно будет одинаковым, а следовательно и все нарисованные точки тоже будут одинаковыми. Функция time возвращает текущее количество секунд в UTC формате. Тебе не стоило писать эту строчку в displayFunction, тебе стоило написать ее в main точно перед glutInit.
    А вызов glutPostRedisplay внутри idle-функции - это правильно, так в GLUT и поступает запрос на перерисовку кадра.
  • Как передать файл для записи в пользовательскую функцию C++?

    @MarkusD Куратор тега C++
    Дмитрий, смотри вот.
    Функция заключает в себе некоторую последовательность действий, которую теоретически можно в совершенно любое время выполнить на определенном наборе данных. Набор данных - это и есть параметры функции.
    Определи сперва то, что должны делать твои функции.

    Что мне надо сделать? - Отрыть файл.
    Какой файл открыть? - Значит или путь файла известен внутри функции, или передается параметром.
    Для чего открыть файл: для записи или для чтения? - Видимо или функция должна своими именем об этом говорить, или режим работы с файлом надо передавать параметром.
    А что делать с дескриптором открытого в функции файла? - Возвращать, пожалуй.
    А что если файл не удалось открыть? - Наверное надо предусмотреть обработку ошибок и возвращать недействительный дескриптор файла.
    Зачем мне нужен дескриптор открытого файла? - Чтобы считать оттуда что-либо или записать туда что-либо.
    Что мне надо сделать чтобы считать из файла что-либо? - ...
    Что мне надо сделать чтобы записать в файл что-либо? - ...
    Что мне делать с дескриптором открытого файла когда он больше не нужен? - ...

    В общем, рассуждай о том, что тебе надо сделать: ставь задачи и ищи решения.
    Посмотри как другие люди решали те задачи, которые ты себе ставишь. (например)
  • Как передать файл для записи в пользовательскую функцию C++?

    @MarkusD Куратор тега C++
    Дмитрий
    Но вот вынести в отдельные функции Создание файла, Запись данных и Считывание данных не могу.

    Расскажи, что именно тебе непонятно. Покажи примеры своих попыток это сделать и поясни почему эти попытки не приводят к нужному тебе результату.
  • C# или C++, что выбрать со связкой с Python'ом?

    frontjss, что-то я не пойму, какая же все таки связка с языком подразумевается.
    Тут, понимаешь, то что ты описываешь и через расширение питона делается, и через IronPython тоже, и через Python .NET точно так же делается. "Расширение возможностей" - это каких? Это расширение через модуль питона? Или это расширение для C++ через Iron/Stackless Python? Или это расширение для C# через Python .NET?
    В твоем вопросе остро нехватает конкретики. Без конкретики не получится дать тебе хороший совет, который действительно поможет тебе решить задачу.
  • C# или C++, что выбрать со связкой с Python'ом?

    Какая именно связка с питоном подразумевается?
  • OpenGL не сразу отображает данные из кадрового буфера?

    @MarkusD Куратор тега C++
    С помощью glFlush ты говоришь конвейеру форсировать выполнение всех запланированных команд.
    Сама эта функция не синхронизирует вызывающий поток с фактом исчерпания буферов конвейера.
    Вызов glFlush является хорошим тоном в ряде случаев. Однако, в документации GLUT сказано что glutSwapBuffers самостоятельно делает вызов glFlush.
    Поэтому для тебя этот вызов является избыточным.

    С другой стороны, если ты не используешь двойную буферизацию, то и glutSwapBuffers тебе не нужен. В этом случае достаточно только вызова glFlush.
  • В int main не воспринимается нормально void, а может просто я тупой?

    @MarkusD Куратор тега C++
    lion221133, А яж тебе написал код, в котором происходит вызов функций.
    Когда ты пишешь A B();, то ты не переменную B с типом A декларируешь, не что-то там еще. Ты декларируешь функцию B, которая не принимает никаких аргументов, но по значению возвращает объекта типа A.
    Таков синтаксис языка. Ты написал void logic(); - значит ты декларируешь функцию без входных аргументов и возвращаемого значения.
    Вызов функции производится иным синтаксисом. В этом синтаксисе используется только имя функции и оператор вызова с передачей параметров - logic();.
  • В int main не воспринимается нормально void, а может просто я тупой?

    @MarkusD Куратор тега C++
    int main()
    {
    for (int i = 0; i < 1;)
    {
    logic();
    DrawPoint();
    DrawPixel();
    }
    return 0;
    }

    Все дело в том, что твой текст просто лишний раз делает упреждающее объявление функций, а не вызывает их.
  • Почему send позволяет отправлять little-endian данные?

    @MarkusD Куратор тега C++
    sddvxd
    Даже набор русских букв в оперативной памяти на разных процессорах будет выглядеть по -разному

    Не на разных процессорах, а в разных кодировках. В 1251, скажем, это будет все тот же 1 байт на символ. А в Unicode - уже от 2 байт. И, снова, UTF-8 - это не представление символа в виде целого числа, это представление символа в виде многобайтового кода, элементы которого должны всегда следовать в одном порядке.
    А вот с UCS-2 все уже очень туманно . Вроде как RFC предписывает BE, но на практике представление UCS-2 подчиняется организации порядка оси. Соответственно, UTF-16 уже будет являться кодом из 16-битных элементов, каждый из которых будет подчиняться порядку байт оси.
  • Какие есть C++ библиотеки для логирования в формате JSON?

    @MarkusD Куратор тега C++
    Иван Филатов, да. Я немного неправильно пишу, я привык эту сущность называть принтером, т.к. она отвечает за преобразование внутреннего представления лога во внешнее. Конечно эту сущность еще можно назвать форматером или билдером.
    Вот пример такой сущности для Easylogging: https://github.com/zuhd-org/easyloggingpp/blob/mas...

    И, да, принтеры можно настраивать никак не меняя код приложения. Принтер, как в том же примере Easylogging, прикрепляется к категории, или на все категории, во время конфигурирования библиотеки.
  • Почему send позволяет отправлять little-endian данные?

    @MarkusD Куратор тега C++
    sddvxd, смотри, там написано что данные на обоих концах переводятся пользовательским процессом.
    Т.е. не система переводит данные. Для системы твой поток данных - сырой и с неизвестной топологией.
    Тебе самому требуется переводить данные в BE. Там все написано адекватно.
    Но! Важное "Но!"
    Переводить требуется только данные полей стандартизированных публичных протоколов. Т.е. это данные заголовков IP и тел протокольных пакетов стандартного сетевого взаимодействия.
    Когда ты ведешь разработку приватного протокола, работу которого не планируется передавать в общественное пользование, ты в праве использовать удобный тебе порядок следования, хоть старый и всеми забытый PDP.
  • Почему send позволяет отправлять little-endian данные?

    @MarkusD Куратор тега C++
    sddvxd , а подскажи, пожалуйста, где и в какой именно форме написано "что сеть работает только сетевым порядком байтов (big-endian)"?
    Приведи ссылку на источник и цитату с этими словами.
  • Какие есть C++ библиотеки для логирования в формате JSON?

    @MarkusD Куратор тега C++
    Иван Филатов, так ведь есть кастомизация вывода через принтер логов. В этом случае даже сторонняя библиотека для JSON не нужна, форматированный текст можно прямо в принтере задавать.

    Я работал с Easylogging и P7, свой принтер для них не составляет никакого труда. В моих проектах требовались не только JSON логи, но и бинарные, и с шифрованием, и с обфускацией. Принтеров было много и создавать их проблемы не было.
  • Почему обращение к namespace не работает из того же файла, но работает из другого?

    @MarkusD Куратор тега C++
    Игорь, Да, не можешь. Вызов функции должен происходить или в контексте инициализации (инициализация по месту объявления переменной/константы), или в контексте исполнения (собственно - локальное пространство любой функции). Без контекста нет детерминизма исполнения.
  • По какому учебнику изучать C++, чтобы работать в современном проекте?

    @MarkusD Куратор тега C++
    beem7
    Это даже мне (а я джун) сложно читать.

    Это такая, немного локальная, проблема. К сожалению, кроме тебя оценить сложность или интересность текста для тебя больше ни кто не сможет. И для интерна у тебя такую же оценку вывести вряд ли получится.

    Но, очень много воды.

    Тут точно так же, оценка водности содержимого сугубо индивидуальна. Скажем, я в тех двух ссылках воды не вижу совсем.
    Автор статьи ведет изложение. Для лучшего усвоения сложных моментов, автор предваряет сложное пояснение некоторым информационным фундаментом. Человеку такой фундамент может показаться водой, он пойдет дальше и не сможет усвоить сложную информацию ниже, т.к. ее пояснение опирается на якобы воду выше.

    Если ты все еще настаиваешь, что эти статьи нужны, то укажи конкретную статью и конкретную цитату, которая даст понимание конкретной вещи

    Конкретно - каждая из приведенных Романом статей дает понимание изложенных там вещей. Понимание надо выстраивать в процессе освоения информации. Информация в статьях изложена в очень доступной форме. Понимание является следствием рассуждений над полученной от статьи информацией.
  • Как инициализировать изменяемый 2D массив char в struct C++?

    @MarkusD Куратор тега C++
    BRAGA96, старайся не забывать отмечать решениями те ответы, которые тебе помогли.
  • Как инициализировать изменяемый 2D массив char в struct C++?

    @MarkusD Куратор тега C++
    BRAGA96
    В теле программы, над функцией main

    Значит контекст глобальный. Ожидаемо, в глобальном контексте то, что ты хочешь сделать, не сработает.
    Для кода, который ты хочешь написать, тебе нужен контекст исполнения - это контекст любой функции.

    Ну если я правильно понимаю то не const, потому что после инциализации структуры я хочу изменять её элементы

    Ты неправильно понимаешь значение слова const в этом месте.
    char - значение можно менять.
    const char - значение нельзя менять.
    char* - указатель, который можно менять, на значение, которое можно менять.
    const char* - указатель, который можно менять, на значение, которое нельзя менять.
    char* const - указатель, который нельзя менять, на значение, которое можно менять.
    const char* const - указатель, который нельзя менять, на значение, которое нельзя менять.

    Константный указатель на константный указатель на константное значение будет выглядеть так: const char* const* const.

    Строковые литералы в C++ являются константными, тип указателя для строкового литерала - const char*. Да и уже просто по смутному смыслу твоих действий в коде, ты не хочешь изменять символы в строке, ты хочешь только указатели на сроки менять.