[Interest] Q_ENUM doesn't work for private enums

Tom Isaacson Tom.Isaacson at navico.com
Sat Oct 27 04:26:26 CEST 2018

I thought that must be it, just surprised it's not mentioned in the documentation:

Tom Isaacson

-----Original Message-----
From: Interest <interest-bounces+tom.isaacson=navico.com at qt-project.org> On Behalf Of Henry Skoglund
Sent: Saturday, 27 October 2018 15:20
To: interest at qt-project.org
Subject: Re: [Interest] Q_ENUM doesn't work for private enums

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

Interest mailing list
Interest at qt-project.org

More information about the Interest mailing list