[Interest] Q_ENUM doesn't work for private enums
Henry Skoglund
fromqt at tungware.se
Sat Oct 27 04:19:40 CEST 2018
On 27/10/2018 03.07, Tom Isaacson wrote:
> I'm using Qt 5.6 in Visual Studio 2017. I've got a class that looks like:
> class tClass : public QObject
> {
> Q_OBJECT
>
> private:
> enum class eMode
> {
> Mode1,
> Mode2,
> Mode3
> };
>
> When I add:
> Q_ENUM(eMode)
> after the enum declaration I get an error:
> moc_tclass.cpp(): error C2248: 'tClass::eMode': cannot access private enum declared in class 'tClass'
> tclass.h(348): note: see declaration of 'tClass:: eMode'
> tclass.h(): note: see declaration of 'tClass
>
> Is this a known limitation of Q_ENUM? Is it fixed in later versions of Qt?
>
Hi, the Q_ENUM macro relies on static data structures declared in the
moc_tclass.cpp file (outside of the scope of the tclass) and these
declarations fail for private stuff. So changing that "private:" to
"public:" is the pretty much your only choice for Q_ENUM to work :-(
Rgrds Henry
More information about the Interest
mailing list