C++ 正确使用来自另一个类的枚举
C++ Using an enum from another class properly
我目前正在使用OpenGL实现一些代码,并且我已经为各种OpenGL类创建了包装器。特别是,我有一个缓冲区类,可以表示顶点数组缓冲区或元素数组缓冲区。为此,我在标头中声明了我的类,如下所示:
Buffer.h
namespace FE { namespace GL {
enum BufferType {
ARRAY = GL_ARRAY_BUFFER,
ELEMENT = GL_ELEMENT_ARRAY_BUFFER
};
class Buffer {
public:
Buffer(BufferType type);
... rest of class ...
};
}
在我的 Renderer 类中,我尝试将一些缓冲区实例化为类成员:
Renderer.h
...
#include "../GL/Buffer.h"
namespace FE { namespace Render {
class Renderer {
...
private:
GL::Buffer vbo(GL::BufferType::ARRAY);
GL::Buffer element(GL::BufferType::ELEMENT);
};
}}
出于某种原因,尝试以这种方式使用枚举会给我错误"语法错误:标识符'ELEMENT'"。Intellisense还警告说,"常量'FE::GL::ELEMENT'不是类型名称。
我不太确定为什么这不起作用,就像以前在测试我的缓冲区相关代码时一样,我以类似的方式创建了缓冲区(通过使用 scope 运算符访问枚举值)。
有关如何解决此问题的任何帮助将不胜感激。
枚举
不会在C++中创建作用域。枚举的类型是FE::GL::BufferType
但要使用它,您只需键入GL::Buffer vbo(GL::ARRAY);
如果需要作用域枚举(使用 C++11),请使用enum class
如果要默认初始化成员,则需要使用大括号{}
或=
:
非静态数据成员可以通过以下两种方式之一进行初始化:
2) 通过默认成员初始值设定项,它只是成员声明中包含的大括号或等于初始值设定项, [...]
namespace FE { namespace Render {
class Renderer {
private:
GL::Buffer vbo{GL::BufferType::ARRAY};
GL::Buffer element{GL::BufferType::ELEMENT};
};
}}
包含这些限制是为了避免成员函数声明和默认成员初始值设定项之间的友好性,请参阅提案:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2756.htm(特别是问题 1 部分)。
相关文章:
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 我正在尝试创建一个枚举,但得到了"identifier expected error"
- 如何在交换机中将一个枚举值标记为不适当的大小写
- 从另一个C++文件中C++ "Importing"枚举类
- 如何声明另一个类中的枚举
- C/C :提取一个枚举的子集以形成新的枚举
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 有没有办法在一个枚举条目中存储多个值
- 为什么我的程序中的一个枚举具有奇怪的价值131075?
- 将一个枚举映射到另一个枚举
- 尝试从另一个类传入枚举
- 将枚举传递给另一个文件?C++
- "error C2065: undeclared identifier" 来自另一个标头的枚举
- 为了简洁起见,在另一个文件中定义前向声明的嵌套结构/类/枚举
- 在Selene中包装一个枚举,以便在Lua中访问
- 为什么我不能将一个枚举作为另一个枚举的基础类型?
- 初始化一个枚举,比如它是一个类,以避免强制类型转换
- 我怎么能有一个枚举自定义类
- Typedef是C++中的一个枚举值
- C++ DirectX11 返回一个枚举类