Задать вопрос
  • Где можно собрать команду для разработки игры?

    WasTabon , чтобы ответить на твой вопрос, нужно сперва узнать где ты уже был и почему отказался от коллаборации там.
  • Как пофиксить ошибку линковщика?

    @MarkusD Куратор тега C++
    DmItrENub, тогда тебе стоит обратить к руководству по настройке статических библиотек в студии.
    Тебе нужно правильно положить .lib файл и добавить его имя в список используемых библиотек в свойствах проекта.
  • Как пофиксить ошибку линковщика?

    @MarkusD Куратор тега C++
    DmItrENub , в какой среде собираешь свой проект?
  • Почему возникают такие ошибки?

    @MarkusD Куратор тега C++
    Brew, П3.8 регламента работы сервиса.
    К сожалению текст на твоих изображениях неразборчив и замылен. Его неприятно читать, поэтому желания отвечать на вопрос не появляется.
    Я рекомендую тебе заменить все изображения с текстом ошибок на листинг ошибок из лога сборки, оформленный тегом <code>.
  • Как определить тип функции для шаблона?

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

    Так и тут. Где конкретно находится этот int n? Я пока только одно место вижу и оно не в шаблоне, поэтому я пока тебя не понимаю.

    class property : public C, а если у C этих property 50+ штук? Реальный пример, для одного из типов у меня порядка 60 свойств определено.

    Тебе не нравится использование decltype(C::n) в шаблоне?
  • Как сделать значения по умолчанию в классе C++?

    @MarkusD Куратор тега C++
    MaratPetrov96
    Здравствуйте!

    П3.4 регламента работы сервиса: Вопрос и его описание не должны содержать приветствий и прочих «лирических отступлений»..

    Опишите конструктор объекта по умолчанию (без аргументов), проинициализировав все данные

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

    char* m = "Renault", тут "Renault" имеет тип const char[N], который свести можно только к const char*. Представленная строка не пройдет трансляцию т.к. тип справа невозможно привести к типу слева.
    char* marka; относится сюда же. Это поле должно иметь тип const char*.

    Car(); и Car(char* m = "Renault" ...) вводят неоднозначность для случая Car example;. Эту неоднозначность нужно убрать и я рекомендую выполнить задание так, как оно написано: т.е. ввести значения по умолчанию в секции инициализации полей конструктора по умолчанию, а от аргументов по умолчанию для конструктора с параметрами отказаться.
  • Почему MinGW не видит winapi функцию?

    Марат Нагаев, ключевая часть фразы - это: "вроде бы".
    expected identifier before string constant

    Это сообщение говорит о том, что в коде на этой строке или выше, все-таки, у тебя ошибка.
  • Почему при вызове деструктора не меняется переменная?

    @MarkusD Куратор тега C++
    liver2009, у тебя в коде тип a реализует схему владения памятью. Владение у тебя, согласно деструктору типа a и счетчику ссылок, реализовано совместное.
    Но для поддержки схемы совместного владения ты не реализовал ни одного конструктора или оператора для копирования и перемещения ресурса, которым твой тип владеет. Такими конструкторами будут конструктор копирования и конструктор перемещения. А операторами - оператор копирования и оператор перемещения.

    В целом, твоей задачей является просто последовать правилу 3/5/0, т.е. правилу пяти чтобы у тебя память ресурса не утекла. Еще для правильного подсчета ссылок тебе надо что-то сделать со своим счетчиком, пока что у тебя значение delete_counter для каждой инстанции a является уникальным, а должно быть уникальным для каждого уникального значения bObj. Да и в целом, счетчик сейчас работает неправильно. Он должен гарантировать удаление уникального bObj только один раз за все совместное владение.

    Пока что, в твоем коде у тебя получается что в один момент времени, точно после отработки оператора копирования по умолчанию, у тебя и *aobj1, и локальный временный a(2), владеют одной памятью. Сразу после этого локальный временный a(2) эту самую память удаляет в своем деструкторе, а *aobj1 начинает ссылаться на мусор.
    К моменту delete aobj1; ты получаешь UB, т.к. деструктор для памяти по указателю aobj1->bObj вызывается уже второй раз.
  • Почему при вызове деструктора не меняется переменная?

    @MarkusD Куратор тега C++
    Василий Дёмин, да, легко, это приводит к UB.
    Просто, подобно автору вопроса, пишем в два разных места один адрес объекта, а потом не задавая вопросов дважды удаляем этот объект из двух этих разных мест.
    Итог: деструктор вызван два раза, второй раз - для неправильного адреса, по которому уже нет объекта.
  • Почему при вызове деструктора не меняется переменная?

    @MarkusD Куратор тега C++
    res2001, можно поправлю? :)
    в этот объект побайтно копируется содержимое временного объекта

    Начиная с C++11 конструкторы и операторы копирования по умолчанию не побайтово копируют память, а используют конструкторы или операторы копирования типов полей.
    Поэтому конструктор и оператор копирования по умолчанию, для возможности быть определенным неявно, требует свойства копируемости от всех полей типа.
  • Почему простой цикл на c++ выполняется медленнее, чем на golang?

    @MarkusD Куратор тега C++
    rPman, как бы long long c = 0; не является кодом C++. Типа по умолчанию в C++ нет.
    Да и в целом, это код C, а не C++. Но собираешь ты его через g++, подтверждая лишний раз нестандартность подхода к стандарту C++ в GCC.
    GCC очень во многих примерах кода сильно отстает от MSCL и clang. Я бы рекомендовал использовать clang для проверок в этом вопросе.

    Так... я все-таки обратил внимание на то, что приведенный в вопросе код ровно такой же. Это значит, вопросы по поводу соблюдения стандарта стоит задавать автору. А я, в итоге, не на того человека сослался со своим комментарием.
  • Какой язык программирования выбрать чтобы стать игровым разработчиком?

    Дима Щербаков , за один год в геймдев? Давай немного приоткрою текущую ситуацию. Я надеюсь, ты живешь где-нибудь за пределами СНГ.
    На текущий момент на территории СНГ закрылись даже такие компании, как Wargaming, Plarium и Sperasoft. О более мелких компаниях можно не говорить, они гроздьями сыпятся с дерева игрового рынка.
    Буквально тысячи разработчиков игр получают вольные и идут искать дальше свою работу мечты. Кто-то уезжает, кто-то идет в другие области разработки П.О. Но рынок соискателей внутри геймдева сейчас перенасыщен дешевеющими высококвалифицированными кадрами.
    И эта ситуация не месяц еще продлится. Через год усердного обучения ты сможешь, как максимум, только напоминать начинающего разработчика. А конкурировать тебе придется с такими людьми, как я.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Adamos
    Мне решение с map-классом представляется более гибким

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

    то есть вы, как и rPman, предлагаете сваять генератор

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

    @MarkusD Куратор тега C++
    Adamos, я бы предложил использовать "мост" для записи строки в произвольное поле по его указателю. Я бы составил ассоциативную таблицу таких мостов, сопоставив имя поля в json мосту соответствующего поля в структуре.
    Мосты в таблице можно хранить по интерфейсу, метод которого всегда может принимать строку. Сам мост, конечно, реализовать на шаблоне.
    Схема очень простая и реализуется средствами одного только STL. В результате получится так, что мы отдадим в функцию только экземпляр структуры и исходный json, а функция далее по таблице все сама заполняет.
    Многократно создавал такие конструкции, составляя таблицу разбора на базе кортежа.

    Сейчас я уже специально решил перейти на язык более высокого уровня для объяснения своего решения. В другое время, в другом месте я бы выдал еще один характерный для себя ответ со 100% решением вопроса.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Matvey_Mt, предлагаю сослаться на пункт регламента чтобы не быть голословным. :)
    Например, П5.1 - Любые оскорбительные формулировки запрещены. За тобой уже третье нарушение в одном вопросе.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Matvey_Mt, встречный вопрос - это проверка твоего уровня знаний.
    Как минимум, сейчас ты узнал что указатель на поле класса - это реальность. Теперь ты можешь хотя бы пойти почитать документацию на эту тему и подумать о том, зачем я передал тебе эту информацию.
    На твой вопрос крайне легко ответить. Я этого не делаю просто потому что, фактически, твой вопрос нарушает П2.1 регламента. "Всем привет" и тому подобная лирика - туда же. Это - нарушение П3.4 регламента. А я не хочу спонсировать нарушения регламента.
    Этим я не хочу как-то задеть или оскорбить тебя. Просто я хочу чтобы ты подумал о том, что мог бы решить свой вопрос очень быстро простым чтением документации. А если пришел с вопросом, то соблюдай правила.
  • Как в цикле заполнить структуру?

    @MarkusD Куратор тега C++
    Matvey_Mt , как записать тип указателя на поле класса?
  • Какая разница на практике между clang и gcc?

    @MarkusD Куратор тега C++
    calculator212,
    Я не совсем понял этот момент, можете пожалуйста пояснить?

    Поясняю: [1], [2], [3], [4].
    GCC еще позволяет в C++ код вида unsigned i;, что тоже неоднократно отражалось в здешних вопросах. И таких вольностей у GCC много, всего не упомнишь.
    clang тоже умеет транслировать код на C и тоже умеет линковать код на C с кодом на C++. И MSCL это все тоже умеет.
    Проблема GCC именно в том, что он позволяет лишнее из кода C в коде C++. Такое поведение GCC расхолаживает пользователей и приводит к проблемам при смене транслятора.

    Я так понял, что под linux/windows предпочтительнее тоже использовать clang

    Под Windows предпочтительнее использовать MSCL, Студию и MSBuild. Под Linux предпочтительнее использовать, все-таки, GCC, т.к. это его дом родной. Под Mac и прочие - предпочтительно использовать clang.
  • Как обстоят дела с модулями C++20 и Inline оптимизацией?

    @MarkusD Куратор тега C++
    Мирон,
    То есть похоже, что Dolarun прав.

    И в чем же конкретно он прав?

    Вырванное из контекста " inline это translation unit bound semantical flag" может означать все что угодно, даже погоду на Марсе.
    Теперь фразе требуется вернуть контекст и внести конкретику. Результатом этого процесса будет строго однозначное понимание термина.