C++ 编译器警告-fpermissive

C++ 编译器警告-fpermissive,c++,qt,compiler-errors,compiler-warnings,C++,Qt,Compiler Errors,Compiler Warnings,在我的代码中,我预定义了一些类,因为它们相互引用如下: class Light; class Room; class Light : public AbstractModel { int mId; QString mName; QString mAddress; bool mIsOn; LightType mType; QString mColor; int mRoomId; Room * mRoom; public:

在我的代码中,我预定义了一些类,因为它们相互引用如下:

class Light;
class Room;

class Light : public AbstractModel {
    int mId;
    QString mName;
    QString mAddress;
    bool mIsOn;
    LightType mType;
    QString mColor;

    int mRoomId;
    Room * mRoom;
public:
    Light();
    Light(const QString& name, const QString& address, int roomId, bool isOn, LightType type, const QString& color);
    virtual ~Light();

    const QString& Name() { return mName; }
    const QString& Address() { return mAddress; }
    int RoomId() { return mRoomId; }
    bool IsOn() { return mIsOn; }
    LightType Type() { return mType; }
    const QString& Color() { return mColor; }
    Room * Room();
    QList<Rule *> Rules();

    void setName(const QString& name);
    void setAddress(const QString& address);
    void setIsOn(bool isOn);
    void setColor(const QString& color);
    void setType(LightType type);
    void setRoomId(int id);

    static bool CreateIfNotExists();
    static bool Drop();

    static QList<Light *> GetAllLights();
    static Light * GetLight(int id);
    static Light * GetLightByAddress(const QString& address);
    static QList<Light *> GetLightsByRoom(int roomId);

    bool Insert();
    bool Update();
    bool Remove();
};

class Room : public AbstractModel {
    int mId;
    QString mName;
    QList<Light *> mLights;
public:
    Room();
    Room(const QString& name);
    virtual ~Room();

    const QString& Name() { return mName; }
    const QList<Light *> Lights();

    void setName(const QString& name);

    static bool CreateIfNotExists();
    static bool Drop();

    static Room * GetRoom(int id);
    static QList<Room *> GetAllRooms();

    bool Insert();
    bool Update();
    bool Remove();
};

您不能通过指定
-fppermissive
来修复任何问题,您只会忽略关键问题。另外,您发布的代码与引起警告的行相距甚远,甚至似乎不包含这些行。您能指出哪些行与编译器消息相对应吗?您在Light中有一个名为Room的方法,它与Room中的构造函数相同,因此当您调用Room()时,它应该使用哪一个?@stark谢谢,我把它改了,警告就没有了。奇怪的是windows上的编译器允许它。问题解决了。
../HomeControlApi/dbmodels.h:60:17: warning: declaration of ‘DbModels::Room* DbModels::Light::Room()’ [-fpermissive]
 Room * Room();
             ^
../HomeControlApi/dbmodels.h:29:7: warning: changes meaning of ‘Room’ from ‘class DbModels::Room’ [-fpermissive]
 class Room;