Название: Ошибка с декларированием собственного класса Отправлено: opera от Октябрь 13, 2022, 18:24 Всем привет, не могу понять в чем ошибка с Q_DECLARE_METATYPE:
Код: namespace MyNamespace { получаю такую ошибку,что не так? Severity Code Description Project File Line Suppression State Error C2280 'MyNamespace::MyClass::MyClass(const MyNamespace::MyClass&)': attempting to reference a deleted function BksMtRisk C:\qt2\5.15.2\msvc2019_64\include\QtCore\qmetatype.h 825 Название: Re: Ошибка с декларированием собственного класса Отправлено: Johnik от Октябрь 13, 2022, 19:14 получаю такую ошибку,что не так? Компилятор не может найти функцию BksMtRisk.Severity Code Description Project File Line Suppression State Error C2280 'MyNamespace::MyClass::MyClass(const MyNamespace::MyClass&)': attempting to reference a deleted function BksMtRisk C:\qt2\5.15.2\msvc2019_64\include\QtCore\qmetatype.h 825 Вероятно она описана в h-файле и отсутствует в cpp, или в приватной части находится. Если хотите подробностей, приведите больше кода. Название: Re: Ошибка с декларированием собственного класса Отправлено: ssoft от Октябрь 14, 2022, 09:08 Код
1) Нет точки с запятой 2) Класс похоже абстрактный Цитировать This macro makes the type Type known to QMetaType as long as it provides a public default constructor, a public copy constructor and a public destructor. Название: Re: Ошибка с декларированием собственного класса Отправлено: opera от Октябрь 14, 2022, 13:47 Нет, проблема естественно была не с точкой запятой, почему то для декларирования типа требуется метод:
Код: MyClass (const MyClass & other){} добавляю его и все нормально,убираю его и ошибка,кто-то может знает зачем этот метод при декларировании? Название: Re: Ошибка с декларированием собственного класса Отправлено: Johnik от Октябрь 14, 2022, 16:15 кто-то может знает зачем этот метод при декларировании? Чтоб с кастомным классом мог работать QVariant Q_DECLARE_METATYPE (https://doc.qt.io/qt-5/qmetatype.html#Q_DECLARE_METATYPE) Название: Re: Ошибка с декларированием собственного класса Отправлено: opera от Октябрь 14, 2022, 18:02 Цитировать Чтоб с кастомным классом мог работать QVarian не все так однозначно, если написать просто вот так:Код: class BaseMyClass Название: Re: Ошибка с декларированием собственного класса Отправлено: Johnik от Октябрь 17, 2022, 15:35 тут этой функции нет и все работает и декларируется Обычно конструктор копирование есть по умолчанию.что именно может повлиять на ОБЯЗАТЕЛЬНОЕ наличие этого конструктора, получается если что-то(что конкретно я не знаю) определено внутри класса,тогда и этот конструктор должен быть ОБЯЗАТЕЛЬНО для декларирования,обычный код с конструктором и деструктором декларируется без конструктора копирования Приведите декларацию вашего класса.Название: Re: Ошибка с декларированием собственного класса Отправлено: kambala от Октябрь 17, 2022, 15:56 например, конструктор копирования может быть непубличным или удаленным, тогда Q_DECLARE_METATYPE использовать не получится
полное отсутствие конструктора копирования в классе идентично записи Код
Название: Re: Ошибка с декларированием собственного класса Отправлено: Old от Октябрь 17, 2022, 16:44 полное отсутствие конструктора копирования в классе идентично записи Код
Наверное имелось ввиду? Код
Название: Re: Ошибка с декларированием собственного класса Отправлено: kambala от Октябрь 17, 2022, 18:20 нет, я имел в виду конструктор копирования по умолчанию :)
Название: Re: Ошибка с декларированием собственного класса Отправлено: Old от Октябрь 17, 2022, 18:34 нет, я имел в виду конструктор копирования по умолчанию :) Тогда не понятно почему "полное отсутствие" идентично этой записи. :)Название: Re: Ошибка с декларированием собственного класса Отправлено: kambala от Октябрь 17, 2022, 19:52 если не написать конструктор копирования самому («полное отсутствие» :) ), компилятор его сам создаст в виде почленного копирования
|