【问题标题】:Errors using enum type in C++ code在 C++ 代码中使用枚举类型的错误
【发布时间】:2016-12-02 09:12:04
【问题描述】:

我刚刚实现了这个类:

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

我收到了这些错误:

  • 错误:'=' 标记之前的预期 unqualified-id -> 在复制函数中;

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

  • 错误:在 return os 行无效使用“enum DSRCmsgID::msgID”->。

【问题讨论】:

    标签: c++ enums omnet++


    【解决方案1】:

    msgID 当前被声明为 type,而不是变量 - 您可以更改:

    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) {}
    

    【讨论】:

    • 好的,谢谢,解决了这些错误,但它仍然返回此错误:“错误:在初始化方法中使用枚举‘ID’而不事先声明”。我之前尝试过声明它,但它不起作用
    • 是的,您对DSRCmsgID(enum msgID ) 的声明不正确——您可能应该为此枚举声明一个类型。我会尽快更新答案。
    • 好的@Paul R 感谢您快速正确的回应!
    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多