expected identifier before string constant
a
реализует схему владения памятью. Владение у тебя, согласно деструктору типа a
и счетчику ссылок, реализовано совместное.delete_counter
для каждой инстанции a
является уникальным, а должно быть уникальным для каждого уникального значения bObj
. Да и в целом, счетчик сейчас работает неправильно. Он должен гарантировать удаление уникального bObj
только один раз за все совместное владение.*aobj1
, и локальный временный a(2)
, владеют одной памятью. Сразу после этого локальный временный a(2)
эту самую память удаляет в своем деструкторе, а *aobj1
начинает ссылаться на мусор.delete aobj1;
ты получаешь UB, т.к. деструктор для памяти по указателю aobj1->bObj
вызывается уже второй раз. в этот объект побайтно копируется содержимое временного объекта
long long c = 0;
не является кодом C++. Типа по умолчанию в C++ нет.Мне решение с map-классом представляется более гибким
то есть вы, как и rPman, предлагаете сваять генератор
Я не совсем понял этот момент, можете пожалуйста пояснить?
unsigned i;
, что тоже неоднократно отражалось в здешних вопросах. И таких вольностей у GCC много, всего не упомнишь.Я так понял, что под linux/windows предпочтительнее тоже использовать clang
То есть похоже, что Dolarun прав.
inline
[?] определяет спецификатор, которым помечаются сущности со слабым внешним связыванием. Связывание внешнее, поэтому для таких сущностей обязательным является требование ODR. В это же самое время связывание обозначено как слабое, это означает что проверка на соответствие ODR для таких сущностей проходит не в момент чтения определения сущности из объектного файла, а в момент встраивания этой сущности.inline
имеет далеко опосредованное отношение.Если бы всё было так просто - их просто скопировали бы на старте
Подозреваю что можно найти готовые либы для этого дела кстати
П3.4 регламента работы сервиса: Вопрос и его описание не должны содержать приветствий и прочих «лирических отступлений»..
Этот пункт требует от тебя использовать секцию инициализации полей в конструкторе по умолчанию. Но ты написал аргументы по умолчанию для конструктора с параметрами.
char* m = "Renault"
, тут"Renault"
имеет типconst char[N]
, который свести можно только кconst char*
. Представленная строка не пройдет трансляцию т.к. тип справа невозможно привести к типу слева.char* marka;
относится сюда же. Это поле должно иметь типconst char*
.Car();
иCar(char* m = "Renault" ...)
вводят неоднозначность для случаяCar example;
. Эту неоднозначность нужно убрать и я рекомендую выполнить задание так, как оно написано: т.е. ввести значения по умолчанию в секции инициализации полей конструктора по умолчанию, а от аргументов по умолчанию для конструктора с параметрами отказаться.