在C ++代码中使用枚举类型的错误

时间:2016-12-02 09:12:04

标签: c++ enums omnet++

我刚刚实现了这个类:

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();
}

我收到了这些错误:

  • 错误:在'='标记之前预期的非限定标识 - &gt;在复制功能;

  • 错误:'枚举DSRCmsgID :: msgID'不是'DSRCmsgID'的非静态数据成员 - &gt;在构造函数和初始化器;

  • 错误:无效使用'enum DSRCmsgID :: msgID' - &gt;在返回操作系列。

1 个答案:

答案 0 :(得分: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) {}