Задать вопрос
  • Как сделать грамотную декомпозицию ООП?

    @MarkusD Куратор тега C++
    dsherbakov , из твоего вопроса откровенно непонятно, что же тебе все таки надо сделать.
    Что значит "СД Стек"? Что значит "брать классы как структуры"? Зачем "необходимо разбить мою задачу на 5 или более структур", почему 5, почему структур, каких структур?
    Какие задачи твой стек должен выполнять? Какой у него должен быть интерфейс? Почему он должен быть на массиве? Какие элементы он должен хранить?
  • Почему в файл выводятся непонятные символы?

    @MarkusD Куратор тега C++
    Сергей Саблин , твой основной ресурс - документация языка на https://en.cppreference.com/w/ .
    Документацию WinAPI стоит изучать на MSDN, у GNU тоже есть своя документация API.

    Функция fwrite реализована на языке C и является частью file i/o API. std::basic_string является частью Strings Library, а std::vector - частью Container Library в Standard Template Library, реализованной на языке C++.
    Иными словами, ты в вызов функции на одном языке передаешь память объектов из другого языка. Компилятор тебе это разрешает, т.к. это синтаксически допустимая операция. Но семантически это недопустимо.

    fwrite(&name, sizeof(name), 1, f);
    В памяти твоей структуры напрямую ничего из nazv или a не хранится, там хранятся только указатели на выделенную память + довольно много сервисных полей. Даже учитывая SSO нельзя говорить что данные самой строки размещаются внутри объекта std::string, т.к. в общем смысле это не так.
    И тут ты берешь память своей структуры и просто пишешь ее в файл. Благо в бинарном виде, это уже неплохо. Но полученный тобой результат ожидаем, т.к. ты в свой файл записал что-то, но не то, что хочешь в файле увидеть.
    Следующий твой код:
    fwrite(&name.nazv, sizeof(string), 1,f);
    fwrite(&name.semestr, sizeof(int), 1,f);
    fwrite(&name.a, sizeof(name.a), 1,f);

    на деле деле выполняет примерно то же самое, что и предыдущий. Поэтому результат не изменится.

    Но вот что тебе действительно надо сделать? Тебе надо, для начала, разобраться в используемых типах. Старайся не использовать те типы, поведение которых ты не понимаешь.
    А далее тебе надо объяснить функции fwrite, откуда ей на самом деле стоит брать память для формирования нужного тебе формата файла. Эта функция ничего не знает о строках и типах, о размещении в памяти и структуре того или иного объекта. Она принимает просто кусок памяти и пишет его в файл по текущей позиции в файле. Все.

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

    У std::string и std::vector в интерфейсе есть функция data (для строки, для вектора) для получения указателя на подконтрольную память. В случае строки ты эту память можешь писать сразу в файл. В случае вектора от int - тоже, т.к. с фундаментальными типами все довольно просто.
  • Почему в файл выводятся непонятные символы?

    @MarkusD Куратор тега C++
    VoidVolker , а можно поподробнее о том, как в отведенной для экземпляра структуры памяти может оказаться "даже какой-то код"? Еще, пожалуйста, поподробнее о семантике терминов "данных пользователя" и "служебные данные и поля". Чем поля отличаются от данных, когда поле является пользовательским, а когда служебным? Когда данные могут быть пользовательскими, а когда - служебными?

    Сергей Саблин, ты используешь объекты типов std::string и std::vector<int>. Расскажи про эти типы, как они работают, какая у них методология управления памятью. Частью какой библиотеки являются эти типы? К какой подсистеме этой библиотеки данные типы относятся?
    К какому семейству API относится функция fwrite?
    И самое важное: на каком именно языке реализовано то семейство API, к которому относится функция fwrite, и на каком именно языке реализованы шаблоны std::basic_string и std::vector?
  • Как правильно создать заголовок, реализацию файлы в C++?

    @MarkusD Куратор тега C++
    sanya84, так тот сценарий, которым ты пытаешься "создать Exe-ник", и называется сценарием сборки.
    Если ты просто дергаешь cl с названием одного файла, как в первой строке в тексте твоей ошибки, то твой проект так не соберется. Тебе нужно сделать сценарий сборки или для cmake, или для msbuild, или для еще какой-нибудь системы сборки проектов.
    Сценарии сборки для msbuild, например, это обычные проекты для Visual C++.

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

    @MarkusD Куратор тега C++
    sanya84 , у тебя в теле вопроса нехватает еще одного текста: текста сценария сборки.
    По ошибкам видно что ты собираешь только один объектный файл и пытаешься линковать только его. И это неправильно.
    Тебе надо сперва получить все нужные тебе объектные файлы, а потом линковать их в бинарный образ. Это все делается через сценарий сборки твоего проекта.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Катя , если тебе что-то непонятно, есть вопросы или уточнения, то будет полезно изложить их в комментариях. Думаю, ты больше всех тут заинтересована в достижении понимания по своему вопросу.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Василий Мельников , про руки и умение писать все понятно. Только это все не важно.
    Тебе не стоит мне или Роме писать про такие случаи, т.к. это 100% промах и в целом попахивает пышной бравадой. В общем, ты тоже все прекрасно понимаешь. До определенных вещей опускаться не стоит.
    Кто так напишет, тот сам себе злобный буратина и должен сходить почитать документы.
  • Как можно вычислить максимальное и минимальное значение массива?

    @MarkusD Куратор тега C++
    Василий Мельников , так а std::minmax разве предназначен чтобы работать на диапазоне итераторов?
    Он работает на значениях и имеет перегрузку для списка инициализации. Вот для списка инициализации Roman и привел вариант.
  • Как проверить вещи зависящие от времени компиляции?

    @MarkusD Куратор тега C++
    Василий Мельников
    Как бы такое побороть, например пометить файл чтобы всегда пересобирался.

    Для этого достаточно добавить PreBuild step с удалением объектного файла требуемого модуля трансляции.
  • Возврат функции, int/void в чём различие. C++?

    @MarkusD Куратор тега C++
    Kezzya
    Скриншот - это по большей части второстепенное.

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

    Есть еще один момент. Если ответ тебе действительно помог, отметь его как решение. Это никак не остановит будущие ответы и предложение иного столь же полезного решения для твоей ситуации.
  • Можно ли из C++/CLR подключить либу на Си?

    @MarkusD Куратор тега C++
    sitev_ru , так все просто, у тебя неполный список библиотек для линковки.
    Либо, если ты напрямую встраиваешь MQTT, то уже модули трансляции этой библиотеки не подтягиваются при линковке.
    У тебя явно не с C++/CX проблемы, а со сценарием сборки.
  • Можно ли из C++/CLR подключить либу на Си?

    @MarkusD Куратор тега C++
    sitev_ru , я как-то не вижу текста с деталями твоих проблем с компиляцией.
    WinRT, C++/CLI, C++/CX спокойно линкуются вместе с чистыми библиотеками C/C++.
    Ты, кстати, неправильное название расширения языка указал. Будет еще лучше если ты правильно определишь используемое тобой расширение и исправишь ошибку. Так будет легче тебе помочь.
  • Передача ссылки на экземпляр объекта из конструктора?

    @MarkusD Куратор тега C++
    BadCats , лучше выписывать текст из Output Window (окно вывода), а не из Error Window (окно ошибок).
    Приведи в своем вопросе полный код обоих файлов.
    Какую задачу решают extern string и почему эту задачу нельзя было решить иным образом?

    К слову. Дружественные функции - это не методы, хоть и являются частью публичного интерфейса класса.
  • Что делать если линковщик ругается на "неразрешённый внешний символ"?

    @MarkusD Куратор тега C++
    Gotenks , ты, кстати, не все настройки проекта показал. :)
    Ругается у тебя линкер. Вот его настройки и нужны.
    Точнее, тебе надо заглянуть в "Linker -> Input -> Additional Dependencies". Там у тебя должны быть вписаны библиотеки зависимостей.
    start-vc-link-libs.png
    А еще вот тут должен быть вписан правильный путь до библиотек SFML.
    start-vc-paths.png

    Ну и в целом, ты же провел предварительную настройку проекта для работы с SFML?
  • Проблема с стандартными библиотеками Windows, что делать?

    @MarkusD Куратор тега C++
    Gotenks , Output Window - это Output Window (View -> Output) :)
    Это текстовый вывод компилятора и не только. У тебя разве не английская локализация студии?
    Сразу учти что в Output Window всегда находится много перегруженного лишней информацией текста, поэтому в открытом виде его в вопрос тоже не стоит писать. Текст из Output Window стоит положить в виде кода под спойлер.

    А внизу на скрине у тебя окно ошибок, оно никому не интересно кроме тебя самого. ))
  • Проблема с стандартными библиотеками Windows, что делать?

    @MarkusD Куратор тега C++
    Gotenks , картинка не нужна совсем. Ее видеть не то чтобы неприятно, она просто неразборчива и перегружена лишней информацией. Снижай энтропию в своих действиях, особенно если хочешь и дальше писать код.
    Код ты выписал - это хорошо. Теперь еще сообщение из Output Window осталось выписать. Тогда можно будет подумать о твоей проблеме.
  • Как проверить имеющийся список на пустоту?

    @MarkusD Куратор тега C++
    andrey_levushkin , дам тебе один очень важный совет.
    Отвыкай выкладывать код в виде архива. Привыкай работать с системами контроля версий.
    Освой SVN, GIT(предпочтительно), CVS или Perforce, по вкусу. Заведи себе аккаунт в BitBucket, gitlab или github(предпочтительно) и выкладывай свой код там.
  • Как создать свой тип данных в языке Си?

    fastkulob , у тебя, в целом, большие проблемы с изложением своих мыслей. Неграмотность в каждом предложении. Такой текст очень просто не понять.

    Ты, похоже, уже понимаешь тип char, что то один символ строки. На самом деле тип char представляет собой участок памяти размером в 1 байт. По некоторому велению судьбы в этот 1 байт можно вписать код любого символа из ASCII. Надеюсь, для тебя это понятно.
    Также я надеюсь, что для тебя понятно и то, что если тебе требуется хранить два символа, то тебе для них нужно уже два байта. А для N символов потребуется уже N байт.
    С этого места у тебя должны появится вопросы относительно упорядоченного доступа к символам своей строки, о последовательном выводе строки, о возможности изменить строку. На эти вопросы отвечает тип - массив.

    Чтобы пояснить тебе такой тип данных, как строка, мне придется потратить крайне много времени на пересказ документации, т.к. сам ты ее, похоже, изучать ленишься. На твой вопрос ни кто не ответит, т.к. твой вопрос тривиален, а ответ на него лежит в документации.
    Итого: первое - научись писать грамотно на родном языке; второе - научись адекватно излагать свои мысли; третье - изучи документацию языка C.