[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