c++ - 在 cpp 和 hpp 文件中,在整个程序使用的 c++ 中在哪里声明枚举?

标签 c++ enums

我有一个在网络上执行模拟的程序。 我所有的类和实现都在 h 文件中,我试图从 main.cpp 调用我的类的函数(它们在 h 文件中)。 我在类里面使用枚举,从 main.cpp 调用的 c'tor 采用枚举值。我一直收到错误,因为每次我更改声明位置时 cpp 或 h 文件都不知道这些枚举。
1.是否应该在我的类(class)内宣布?外部?在cpp和h文件中? 2.如果我还希望类的方法能够使用枚举类型,我应该把声明放在哪里? 3. 从 cpp 文件和类的方法中获取枚举类型的正确方法是什么?我看到了几个选项,例如 ClassName::enumType、CLassName.enumType 等等。 这是我的代码结构:

    main.cpp
    #include...

    enum networkType {X,Y};

    int main(){
    //create instances of my class 
    network n = new network(X, ...);


    }


    networks.h
    //enum networkType {X, Y};      here?
    class network{

        enum networkType {X, Y};         //here?
    network::network(networkType x, ...) //c'tor
    ..
//members:
    networkType type_;

//functions that use the enumerated value
    void setNetworkType(networkType t);
    networkType getNetworkType();
...more methods

我遇到的一些错误是 - 对于 getter 方法 - 'networkType' 没有命名类型 网络类型网络::getNetworkType()

谢谢。

最佳答案

如果将 enum 定义放在类中,则枚举的实际名称是 network::networkType。任何时候在类范围之外时都必须使用全名(包括类外部成员函数定义的返回类型,除非您使用尾随返回类型)。

network::networkType network::getNetworkType()
{ return _type; }

(请注意,如果您在 main.cpp 中也有 enum network,如您所示,那是不同且不兼容的类型。)

关于c++ - 在 cpp 和 hpp 文件中,在整个程序使用的 c++ 中在哪里声明枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43696426/

相关文章:

scala - 自定义 Scala 枚举,搜索到的最优雅的版本

java - 在字节码层面,Java的Class.getEnumConstants()如何知道哪些类是枚举类?

c# - 替换需要翻译和枚举的enum

c++ - 将 1bit/bw/二进制图像中的像素打包到盒子中

java - 在 Eclipse 中同时构建和上传

java - Protocol Buffer 3 : Enums as keys in a map

c# - 将 SqlDataType 转换为 C# 枚举

java - 有没有办法在 Android 上使用 WebRTC 共享屏幕

c++ - 在多维和一维数组之间进行转换

c++ - 如何在 C++ 中存储一对数字?