如何转发声明枚举?

How to forward declare enums?

本文关键字:声明 枚举 转发 何转发      更新时间:2023-10-16

在使用枚举器之前,我们是否必须声明枚举类?

如果不是,我们如何转发声明枚举?

以下程序导致编译错误

#include <iostream>
enum class Color;
int main()
{
Color c = Color::Green;
}
enum class Color
{
Red,
Green,
};

编译器:

1>------ Build started: Project: Project1, Configuration: Debug x64 ------
1>Project1.cpp
1>C:UsersAdminsourcerepos2Project1Project1.cpp(6,19): error C2027: use of undefined type 'Color'
1>C:UsersAdminsourcerepos2Project1Project1.cpp(2): message : see declaration of 'Color'
1>C:UsersAdminsourcerepos2Project1Project1.cpp(6,24): error C2065: 'Green': undeclared identifier
1>Done building project "Project1.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

你正在这样做:

不透明枚举声明:定义枚举类型,

但不定义其枚举器:在此声明之后,类型是完整的类型,其大小是已知的。

读取枚举 https://en.cppreference.com/w/cpp/language/enum