• Не загружается скетч на Arduino. Какие ошибки?

    @MarkusD Куратор тега C++
    Anonymous5454587, ты над человеком издеваешься что ли?
    Не легче ли будет тебе самому обратиться к документации языка и изучить самые его основы?
    Например, посмотреть документацию к for [?] и усвоить обучающий материал. В чем у тебя сложность с этим?
  • Имеет ли смысл такой вид передачи аргументов в метод класса?

    @MarkusD Куратор тега C++
    have_a_nice_day13 , всё будет зависеть от смысла происходящего в коде.
    Хорошо, у тебя есть тип данных с некоторым интерфейсом. Интерфейс этого типа построен так, что требует передачи каких-то данных параметром. Пока все абстрактно и непонятно.
    Конкретика появится тогда, когда станет понятно, что это за тип данных и какой именно у него интерфейс. А так же - что за структура, экземпляр которой требуется для работы с интерфейсом обозначенного типа.

    Есть т.н. шаблон "Toolbox", в рамках которого объект некоторого типа, используя свое состояние и свой интерфейс, позволяет менять состояние объектов некоторого другого типа.
    Например, таким тулбоксом может быть краскопульт. Пример, в целом, некрасивый, но наглядный. В состояние краскопульта ты кладешь цвет краски, а потом через его метод распылить_на( кузов ) можешь покрасить кузов любой машины. При этом краскопульт поменяет состояние кузова машины.

    Есть т.н. "Value Object" или еще его называют "Parameter Object", суть которого - это собрать какие-то данные для того чтобы дальше переместить их в функцию потому что функция для своей работы требует такой VO вместо каких-нибудь 16-ти или 23-х параметров.

    Есть т.н. контекст, с которым может работать интерфейс большого объекта, реализуя, например, шаблон "Состояние".

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

    @MarkusD Куратор тега C++
    Wataru,
    Лучше передавать указатель вместо неконстантной ссылки. Так из места вызова сразу видно, что передаваемое значение может меняться.

    Указатель в параметре явно говорит о необязательности параметра и о том, что в качестве аргумента можно передать nullptr. Подобная семантическая нагрузка буквально неуместна в самом широком наборе вариантов, когда модификация аргумента оправдана.
    Из места вызова модифицируемость параметра должна быть видна иначе. На выбор есть два 100% рабочих варианта: первый - через перемещение аргумента и возврат его в качестве результата функции; второй - через семантичное имя функции, которая однозначно говорит, что будет менять состояние параметра, например.

    В качестве дополнения, в Core Guidelines есть F.16 и F.17.
    Передача изменяемых параметров по указателю пропагандируется в Google C++ Style Guide, а этот стиль людьми сильно критикуется, например.
  • Почему при компиляции проекта console application в dev c++ большой вес файла?

    @MarkusD Куратор тега C++
    DaniZiat, опять же, 2КБ из VC++ с какими настройками и из какого кода получились?
    Ты ведь понимаешь что сейчас никакой конкретики в свои слова не вносишь? Тебе нужно показать полностью все настройки проектов и указать все версии используемых инструментов, чтобы быть конкретным в своих словах.
    Без конкретики на твой вопрос ответить невозможно.
  • Почему при компиляции проекта console application в dev c++ большой вес файла?

    @MarkusD Куратор тега C++
    DaniZiat, т.е. на деле у тебя нет вопроса?
    Пользователей сегодня устраивает размер в 400МБ только одного бинарного файла без учета 1.5ГБ подключаемых библиотек и 30ГБ ассетов, без которых продукт просто не запустится. Твой текущий 1МБ - это очень скромный размер.
    Я все еще не понимаю твоего вопроса. Это пока еще не говоря о том, что ты не указал ни настройки сборки своего проекта, ни объем исходного кода, ни область задач, которые твоя программа решает.
  • Почему при компиляции проекта console application в dev c++ большой вес файла?

    @MarkusD Куратор тега C++
    DaniZiat , почему ты считаешь этот размер большим?
    Почему ты считаешь это проблемой и зачем тебе добиваться размера в 12КБ?
  • 3D-принтер Ender-3X - крепление стеклянной платформы?

    TosterIQ , тебе стоит показать на фото, что именно ты называешь "основной". Алюминиевое основание стола, к которому крепится термоэлемент? Или основой ты называешь текстолитовую накладку, поверхность которой используется при печати?

    Стекло заменяет текстолит. И стекло, и текстолит - это накладки на основание стола. Вместе их использовать незачем.
  • Mоего преподавателя не устраивают следующие операторы:Rev(&n,&A,&D) и Mult(&n,%D,&B1,&X1)?

    @MarkusD Куратор тега C++
    LmaoTJ,
    преподаватель спрашивает зачем они нужны

    Мне тоже очень интересно, зачем они нужны. Расскажешь?
  • Почему не работает часть программы?

    @MarkusD Куратор тега C++
    pfemidi, я за 20 лет своей практики видел всякое. Такой код в коммерческих продуктах тоже видел. Весь мой опыт и позиция относительно подобных вопросов позволяют мне определять ошибки трансляторов, чем я последние 5 лет периодически и занимаюсь.
    Иногда транслятор может сказать что в твоем коде ошибка просто потому что ошибка на самом деле в трансляторе. И хороший специалист должен уметь определять такие ситуации. А значит, хороший специалист должен лучше транслятора знать стандарт языка.
  • Почему не работает часть программы?

    @MarkusD Куратор тега C++
    pfemidi,
    И это IMHO не только работать, это даже компилироваться не будет.

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

    @MarkusD Куратор тега C++
    pfemidi, я так понимаю, это вопрос?
    Да, можно так, как у тебя в первом блоке кода. И это нормально, ты ведь пишешь всякий код после case. Чем в этом случае обделен if?
    Более того, существуют ли какие-либо ограничения для установки меток [?] внутри локальных областей функций?

    Единственное что, в твоем первом блоке кода doOther(); никогда не выполнится потому что исполнение прыгает только на метки case, но не перед ними. Исполнение дальше switch не пойдет, а всегда только куда-нибудь прыгнет.
  • Почему не работает часть программы?

    @MarkusD Куратор тега C++
    iamgrootyhuuu,
    d-день, m-месяц,g-год,S-следующий день

    А что тебе будет понятнее прочитать: d или day_number?
    Соответственно: m или month_number?
    И еще: S или next_day_number?
    Ты ссылаешься на задание, но ты не всегда будешь его помнить. В следующем году, когда ты уже все забудешь, ты откроешь этот код и точно так же, как и все остальные участники текущего обсуждения, не будешь видеть никакого смысла в этих однобуквенных названиях.
    Моим советом, который дальше только поможет тебе, будет: всегда выбирай осмысленные имена. Никогда не ссылайся на задания или что-то еще, передавай суть заданий прямо в тексте программы. Для этого всегда выбирай только осмысленные имена, которые отражают смысл существования в рамках твоей задачи.
    Пока у тебя получается вот такое. Там человек сперва пишет одно, а потом имеет в виду вообще другое. Твой код, точно так же, пока только вводит в заблуждение.
    Твоя стратегия мышления должна быть схожей вот с этим. Посмотри там сам вопрос, а потом цепочку комментариев от обозначенного и ниже.

    а switch получается показывает, какие переменные нужно проверять в условии, которое написано в case

    Тут нужно сходить в документацию оператора switch [?] и увидеть что проверка идет только для одного выражения. Я не просто так написал про int operator , ( int, int ), по умолчанию comma operator возвращает только свой правый аргумент.
    Код switch (d, m, g) эквивалентен switch (g).
    На самом деле другие люди тебе мало чем смогут помочь по изучению языка. Даже я вряд ли смогу тебе полноценно помочь. Тебе будет лучше обратиться к известным общедоступным источникам информации по языку. Сперва все будет очень непонятно, но ты просто читай, на начальных этапах всегда важно собирать информацию.
    Между тем, тебе всегда стоит помнить что люди будут только рады дать исчерпывающий ответ на твой конкретный вопрос. "Помочь с синтаксисом" - довольно широкий вопрос, на который довольно тяжело ответить. "Как правильно пользоваться конструкцией switch-case" - хороший, конкретный вопрос, на который любой квалифицированный специалист будет рад дать ответ.

    мне вроде удобно читать

    На самом деле неудобно даже тебе и даже сейчас. Пока у тебя не больше 20 строк кода, ты можешь позволить себе такое форматирование. Но посмотри на это. Там сложность зашкаливает. Без горизонтального блочного форматирования код был бы абсолютно нечитаемым. И, на самом деле, твой код является нечитаемым абсолютно для всех разработчиков потому что люди уже привыкли код видеть блоками. Тебе стоит просто попробовать и ты поймешь насколько это облегчает понимание.
    Подобные статьи помогут тебе с этим вопросом: [1], [2], [3], [4], [5].

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

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

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

    int d, m, g, S;
    Какой смысл в существовании каждой из этих переменных? Если у тебя не получается сформулировать смысл существования какой-то переменной, тебе нужно стереть эту переменную. Если у тебя получается сформулировать смысл существования переменной, то почему переменная названа настолько бессмысленно?

    switch (d, m, g)
    Тут два раза применен int operator , ( int, int ), какой у него эффект по умолчанию?

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

    @MarkusD Куратор тега C++
    pfemidi,
    Давно ли внутри switch можно делать if?

    Всегда можно было. Это стандартный синтаксис. case - это просто метка, на которую исполнение прыгает при соответствии условия. Локальность на все case едина - это локальность switch. Далее, после каждого case уже можно организовать свою локальность. Собственно, именно поэтому определение локальных переменных просто под case и сулит проблемами.
    Возможно это тебя шокировало, но таков синтаксис C++. :)
  • Прекращает ли свою работу функция(не void) после того как вернет значение?

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

    @MarkusD Куратор тега C++
    HoShik, твоя функция умеет домножать на половину числа? Что будет если первым аргументом будет передано число 1.5f?
    Ты в курсе что при передаче переменного количества аргументов, сами эти аргументы проходят нормализацию? Внутри mult() у тебя только один первый аргумент имеет тип float, все остальные - double.
  • Как исправить ошибку "Buffer is too small" C++?

    @MarkusD Куратор тега C++
    none7, тогда тебе нужно именно так в ответе и написать. Пока твой ответ вызывает только обозначенный мной вопрос. Обрати внимание на точность моего вопроса.
    Сейчас в своем ответе ты написал что strlen() вообще игнорирует терминальный символ в своей работе. Но функция его не учитывает только в своем результате, что и отражено в документации функции.

    Никаких общеизвестных фактов на этот счет не существует. Единственным твоим источником информации должна быть только документация.
  • Как исправить ошибку "Buffer is too small" C++?

    @MarkusD Куратор тега C++
    none7 , приведи, пожалуйста, ссылки на документацию, где сказано что стандартная функция strlen() при своей работе игнорирует терминальный символ.
  • Как исправить ошибку "Buffer is too small" C++?

    @MarkusD Куратор тега C++
    Данил Васькевич, не забывай ставить упоминания. Только так человек (я), которому ты отвечаешь, сможет узнать что ты ему ответил.
    Странно что в вопросе ты обрамил код соответствующим тегом, а в комментарии - нет. Будет лучше если ты отредактируешь свой комментарий и приведешь код в читабельный вид.

    По коду, пока только то, что я могу увидеть.
    size_t size = 80;
    string_ = new char[80]{""};

    Какой смысл в size если она не используется?
    Зачем в конструкторе по умолчанию выделять какую-то память, когда ты не знаешь как пользователь дальше будет распоряжаться объектом?

    String(const char* string) {
    delete[] string_;
    size_t size = strlen(string);
    strcpy_s(string_, size, string);
    }

    Этот код не работает. delete[] string_; в этом месте будет означать delete[] nullptr;, т.е. нонсенс. Оператор delete[] ничего не освободит. В это время, strcpy_s(string_, size, string); будет означать strcpy_s(nullptr, size, string);, что приведет к падению.

    String(const String &str) {
    size_t size = strlen(str.string_) + 1;
    strcpy_s(string_, size, str.string_);
    }

    Этот код тоже падает, тоже по тем же причинам.

    При этом, у тебя в коде нет функций resize() и reserve(), которые и должны управлять подконтрольным строке буфером памяти.
    Твой concat() должен быть примерно таким:
    String String::concat(const String& other) const
    {
      String result;
      
      result.reserve( length() + other.length() + 1 );
      result = *this;
      result += ' ';
      result += other;
      
      return result;
    }