2016-12-02 86 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