C++ - 使用来自不同头文件、相同命名空间的枚举

标签 c++

我希望能够使用在一个文件中定义并在其他文件中使用的枚举类。当我尝试时,我只得到这个错误:enum "Animal"has no member "Lion"

我找不到任何回答我问题的帖子。

这是我的想法的一个例子:
zooanimals.h

#pragma once

namespace Zoo
{
    enum class Animal;
}

zooanimals.cpp

#include "zooanimals.h"

namespace Zoo
{
    enum class Animal
    {
        Lion,
        Elefant,
        Monkey
    };
}

zoo.h

#pragma once

namespace Zoo
{
    class Visitor;
}

zoo.cpp

#include "zoo.h"
#include "zooanimals.h"

namespace Zoo
{
    class Visitor
    {
        Animal favoriteAnimal = Animal::Lion;
    };
}

最佳答案

你没有在声明和定义中拆分枚举,所以

enum class Animal
{
    Lion,
    Elefant,
    Monkey
};

应该在标题中,而不是在源文件中。

请记住,当您将头文件包含到源文件中时,此源文件只能“看到”此头文件中声明的内容。在您的情况下,当编译器处理 zoo.cpp 时,它无法“看到”Animal 的值,因为它们不在 header 中。

关于C++ - 使用来自不同头文件、相同命名空间的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582145/

相关文章:

c++ - 几个 catch block 还是一个带有 dynamic_cast 的 block ?

c++ - 指向类数据成员 "::*"的指针

c++ - Plesk 管理面板 C/C++ API 示例

c++ - 避免在构造函数中分配或保持简单性(和 RAII?)

c++ - C 或 C++ 链接器中是否有任何类型检查?

c++ - MSVS 2015配置文件指导的优化-在各种计算机上部署仪器构建

c++ - 读/写 PPM 图像文件 C++

c++ - 使用 long int 以避免溢出是一个好习惯吗?

c++ - 应该向 gcc 提供什么编译器参数让它认为它是 g++?

c++ - 如何使用 C++ 中的通用 vector 对动态内存中的对象列表进行排序?