Задать вопрос
  • Почему при выделении динамической памяти она не выделяеться и странно работает?

    @Furax
    Ваш вопрос не по C++, а по C, это разные языки.

    sizeof(buffer) в функции create_filestream() вернёт размер указателя (4 или 8 байт), а не размер буфера buffer из функции main, т. к. функция create_filestream про него ничего не знает. Скорее всего, это не то, чего Вы хотите.

    Строка "if(*ptext = (char**)realloc(*ptext, sizeof(*ptext) + sizeof(char**)))", по-видимому, должна к текущему размеру данных, ассоциированных с *ptext, добавлять размер ещё одного указателя. По факту sizeof(*ptext) - это размер char**, т. е. размер указателя, т. е. у Вас всегда будет здесь или 8 байт (сумма размеров двух указателей на 32-битной платформе), или 16 (на 64-битной). Получить размер массива, который в данный момент ассоциирован с указателем, оператором sizeof() нельзя и в общем случае вообще нельзя, его нужно хранить отдельно.

    Перечитайте внимательно главу про обращение с указателями. Пока у Вас каша, которая вряд ли будет работать ожидаемым образом. Нужно чётко понимать, что такое char*, char**, char***, sizeof(ptext), sizeof(*ptext) и т. д.
    Ответ написан
    Комментировать
  • Почему не записываются данные в выходной поток итератором ostream...?

    @Furax
    Элемент Students[0] существует ли после чтения из файла? Есть подозрение, что вектор Students пустой.
    Ответ написан
  • Почему в c++ еще нету Null-Conditional Operator?

    @Furax
    Используйте метод and_then, он как раз для этого.
    Ответ написан
    Комментировать
  • А return 0(1) * _getch(), есть ли смысл от такой конструкции?

    @Furax
    Похоже на неуклюжую попытку игнорировать результат вызова функции _getch() и не словить предупреждений.

    Синтаксис "0(1)" специфичен для Visual Studio. Clang 18.1.3 и GCC 13.3.0 его не понимают. Писать на C++ так, чтобы при переносе на другую платформу приходилось править синтаксис, - довольно плохая практика (обычно находится и так достаточно проблем, чтобы их ещё руками плодить). С другой стороны, функция _getch() объявлена в conio.h, которого на том же линуксе нет, поэтому, возможно, переносимость и не была целью.

    Кстати, за более чем 15 лет на C++ вижу такой синтаксис впервые. Повод задуматься о том, насколько он будет понятен следующему разработчику.
    Ответ написан
    1 комментарий
  • Почему не работает оператор for each в C++?

    @Furax
    Тип элемента в первом range-based for (правильное название того, что Вы назвали for each) у Вас указан как int, тогда как фактически там int[2]. Компилятор не может неявно привести массив intов к intу, поэтому выдаёт ошибку. Используйте тип const auto&, чтобы не копировать подмассивы при каждом проходе. Также стоит убедиться, что Вы компилируете в нужной версии C++ (для g++ это аргумент, например, -std=c++20).
    Ответ написан
    Комментировать
  • Visual Studio не билдит 1 файл, что делать?

    @Furax
    Что значит "полчаса без результата, ничего не собирает"? Откуда уверенность, что сборка не происходит? Если есть какие-то ошибки, их стоит показать. Если речь о том, что выходной файл не меняется - стоит проверить, есть ли вообще связь между ним и изменённым файлом. (Решение может состоять из нескольких проектов, не связанных между собой.)
    Ответ написан
  • Почему у меня пропадает число, которое я подаю при инициализации класса?

    @Furax
    Здравствуйте. У вас множество логических ошибок, рекомендую запустить под отладчиком и идти по шагам, разбираясь, что идёт не так. Без этого такой код Вы, боюсь, не запустите. Первое место, где выполнение идёт не так - в функции int_len(), которая для вычисления количества цифр проверяет текущее значение на '>9', хотя оно изначально отрицательно. Скорее всего, сюда уже модуль числа должен приходить. Дальше тоже есть ошибки, которые нужно исправлять по одной.

    Ещё очень резануло глаз, что у Вас класс работает с динамической памятью, но не имеет копирующих/перемещающих конструкторов и операторов ++ (почитайте). В таком виде это нормально работать не будет - либо добавьте нужные конструкторы/операторы, либо не используйте вручную динамическую память (заверните в vector).
    Ответ написан
    Комментировать
  • Почему clang не видит стандартные библиотеки c++?

    @Furax
    Как-то сталкивался с подобным. Clang трепетно относится к указанию версии стандарта. Имеет смысл добавить аргумент `-std=c++20` (или какую версию планируете использовать). Более сложная ситуация может быть связана с отсутствующими в системе файлами или выбором нужной библиотеки C++, но для начала имеет смысл проверить очевидное.
    Ответ написан
    2 комментария