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

C++ - Use enum from different header file, same namespace

本文关键字:命名空间 枚举 文件 C++-      更新时间:2023-10-16

我希望能够使用在一个文件中定义并在其他文件中使用的枚举类。当我尝试时,我只得到这个错误: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的值,因为它们不在标头中。