2016-12-02 85 views
0

使用枚举类型我实现了这个类:错误的C++代码

class MIXIM_API DSRCmsgID : public cObject 
{ 
public: 
    /** @brief Constant with all values set to 0. */ 
    static const DSRCmsgID ZERO; 

public: 

    //int msgID; 
    enum msgID { 
     DSRCmsgID_reserved = 0, 
     DSRCmsgID_alaCarteMessage = 1, 
     DSRCmsgID_DSRCmsgID = 2, 
     DSRCmsgID_DSRCmsgIDVerbose = 3, 
     DSRCmsgID_commonSafetyRequest = 4, 
     DSRCmsgID_emergencyVehicleAlert = 5, 
     DSRCmsgID_intersectionCollisionAlert = 6, 
     DSRCmsgID_mapData = 7, 
     DSRCmsgID_nmeaCorrections = 8, 
     DSRCmsgID_probeDataManagement = 9, 
     DSRCmsgID_probeVehicleData = 10, 
     DSRCmsgID_roadSideAlert = 11, 
     DSRCmsgID_rtcmCorrections = 12, 
     DSRCmsgID_signalPhaseAndTimingMessage = 13, 
     DSRCmsgID_signalRequestMessage = 14, 
     DSRCmsgID_signalStatusMessage = 15, 
     DSRCmsgID_travelerInformation = 16 
    }; 

private: 
    void copy(const DSRCmsgID& other) {msgID = other.msgID; } 

public: 
    /** @brief Default constructor. */ 
    DSRCmsgID() 
     : msgID() {} 

    /** @brief Initializes a DSRCmsgIDinate. */ 
    DSRCmsgID(enum msgID) 
      : msgID(msgID) {} 

    /** @brief Initializes DSRCmsgIDinate from other DSRCmsgIDinate. */ 
    DSRCmsgID(const DSRCmsgID& other) 
     : cObject(other) { copy(other); } 

    /** @brief Returns a string with the value of the DSRCmsgIDinate. */ 
    std::string info() const; 

}; 


inline std::ostream& operator<<(std::ostream& os, const DSRCmsgID& DSRCmsgID) 
{ 
    return os << "(" << DSRCmsgID.msgID << ")"; 
} 

inline std::string DSRCmsgID::info() const { 
    std::stringstream os; 
    os << *this; 
    return os.str(); 
} 

我得到了这些错误:

  • 错误复制功能;

  • 错误:'enum DSRCmsgID :: msgID'不是构造函数和初始化程序中'DSRCmsgID' - >的非静态数据成员;

  • 错误:无效使用'枚举DSRCmsgID :: msgID' - >在返回os行。

回答

8

msgID目前声明为,而不是一个变量 - 你可以只改变:

enum msgID { 
    DSRCmsgID_reserved = 0, 
    // ... 
    DSRCmsgID_travelerInformation = 16 
}; 

到:

enum { 
    DSRCmsgID_reserved = 0, 
    // ... 
    DSRCmsgID_travelerInformation = 16 
} msgID; 

但是它可能会更方便申报类型:

enum MsgID { // the type of this enum is `MsgID` 
    DSRCmsgID_reserved = 0, 
    // ... 
    DSRCmsgID_travelerInformation = 16 
} msgID;  // and we also have an instance variable of this type, `msgID` 

那么你也可以解决这个问题的构造:

DSRCmsgID(enum msgID) 
     : msgID(msgID) {} 

这将成为:

DSRCmsgID(MsgID msgID) 
     : msgID(msgID) {} 
+0

好谢谢,解决了这些错误,但它仍然返回该错误:“错误:使用枚举的“ID '没有事先声明'的初始化方法。我试图先声明它,但它不起作用 – FMA

+0

是的,您的'DSRCmsgID(枚举msgID)'声明不正确 - 您应该为此枚举声明一个类型。我会尽快更新答案。 –

+1

Allright @Paul R感谢您的快速和正确的回应! – FMA