Я прихожу из C # фона и до сих пор разбираюсь в умных указателях c ++ и Qt. Это должен быть основной вопрос:
В myClass.h
QSharedPointer<AccessFlags> m_flags;
В myClass.cpp я пытаюсь установить (установлено правильное слово?) Указатель m_flags
if(m_flags.isNull())
m_flags = new AccessFlags();class AccessFlags{
public:
QHash<QString,int> flags;
AccessFlags(); //The dictionary is setup in the constructor
};
Компилятор жалуется «нет соответствия для оператора =» в ..
Как мне установить указатель?
Вы пытаетесь назначить необработанный указатель на QSharedPointer
в соответствии
m_flags = new AccessFlags();
Вы, вероятно, хотите что-то вроде
m_flags = QSharedPointer<AccessFlags>(new AccessFlags);
Рассмотреть возможность использования станд :: shared_ptr вместо QSharedPointer, если вы работаете с современным компилятором C ++ 11 (например, GCC 4.6 или выше и MSVC 10.0).
Во-первых, это стандарт, а во-вторых, вы могли бы использовать станд :: make_shared инициализировать указатель, который может быть быстрее! (Например, в MSVS2010 / 2012 выделение происходит только один раз для make_shared вместо двух выделений: одно для нового и одно для внутреннего счетчика).