Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过数值限制为枚举指定最大值?_C++_Enums_Limits - Fatal编程技术网

C++ 通过数值限制为枚举指定最大值?

C++ 通过数值限制为枚举指定最大值?,c++,enums,limits,C++,Enums,Limits,在enummax值中分配元素时遇到问题。第一: protected: enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()}; 受保护: 枚举{DEFAULT_PADDING=std::numeric_limits::max()}; 结果: /basecode.h:30:51:错误:应为标识符或“{” 枚举{DEFAULT_PADDING=std::numeric_limits::max()}; ^ ./baseco

enum
max值中分配元素时遇到问题。第一:

protected:
    enum {DEFAULT_PADDING=std::numeric_limits<enum>::max()};
受保护:
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
结果:

/basecode.h:30:51:错误:应为标识符或“{”
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
^
./basecode.h:30:59:错误:应为类型
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
(还有其他几个)
第二,转向:

protected:
    enum {DEFAULT_PADDING=std::numeric_limits<unsigned int>::max()};
受保护:
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
结果:

/basecode.h:30:27:错误:表达式不是整型常量表达式
枚举{DEFAULT_PADDING=std::numeric_limits::max()};
如何设置
数值\u限制
给我一个值,我可以在编译时为
枚举
使用该值


这个库比较旧,所以它支持很多旧的编译器和IDE。我需要的东西至少是C++03,最好是C++98

标准注意事项适用:这是一个简单的基于make的项目。它不使用Autotools,不使用Cmake,不使用Boost等等。

在C++03中,它只是
静态的
。在C++11中,它变成了
静态的constexpr
。您需要后者才能在整型常量表达式中使用,因此只需使用编译即可ode>-std=c++11
就可以了

如果你不能使用C++11,你可以直接使用。

在C++03中是简单的
静态的
。在C++11中,它变成了
静态的constexpr
。你需要后者才能在整型常量表达式中使用,因此只需使用
-std=C++11
编译即可

如果你不能使用C++11,你可以直接使用。

在C++03中是简单的
静态的
。在C++11中,它变成了
静态的constexpr
。你需要后者才能在整型常量表达式中使用,因此只需使用
-std=C++11
编译即可

如果你不能使用C++11,你可以直接使用。

在C++03中是简单的
静态的
。在C++11中,它变成了
静态的constexpr
。你需要后者才能在整型常量表达式中使用,因此只需使用
-std=C++11
编译即可



如果你不能使用C++11,你可以直接使用。

你是用
-std=C++11
编译的吗?
数值限制::max
声明为
静态
,而enum需要常量。@Jonathan-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-
constepr
被添加到语言中,使函数能够在编译时进行求值。简单地将函数标记为返回
const
不足以使其成为编译时常量-如果是,则
constepr
将是多余的ler可能会将
max()
优化为一个常数(而且可能会)但是这还不足以满足
enum
的要求。你是用
-std=c++11
编译的吗?
数值限制::max
声明为
静态
,而enum需要常量。@乔纳森-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的I信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-
constexpr
被添加到语言中,使函数能够在编译时进行计算。简单地将函数标记为返回
const
不足以使其成为编译时常量-如果是,
constexpr
冗余。编译器可能会将
max()
优化为一个常量(并且可能会)但是这还不足以满足
enum
的要求。你是用
-std=c++11
编译的吗?
数值限制::max
声明为
静态
,而enum需要常量。@乔纳森-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的I信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-
constexpr
被添加到语言中,使函数能够在编译时进行计算。简单地将函数标记为返回
const
不足以使其成为编译时常量-如果是,
constexpr
冗余。编译器可能会将
max()
优化为一个常量(并且可能会)但是这还不足以满足
enum
的要求。你是用
-std=c++11
编译的吗?
数值限制::max
声明为
静态
,而enum需要常量。@乔纳森-如果它不是常量,我会感到惊讶。你是说它在运行时会发生变化吗?@Barry-我添加了额外的I信息。简言之,我需要C++03和C++11。我也需要C++98。请看一看-
constexpr
被添加到语言中,使函数能够在编译时进行计算。简单地将函数标记为返回
const
不足以使其成为编译时常量-如果是,
constexpr
冗余。编译器可能会将
max()
优化为一个常量(并且可能会)但这还不足以满足
enum
的要求。请注意,在VC++2013中,它仍然是
静态的
,因此依赖于编译器。这个库很旧,它支持很多旧的编译器和IDE。我需要C++98、C++03和C++11。
numeric\u limits
是用于此工作的错误工具吗?(我认为应该在C++中使用它)。
enum
很好。正如
numeric\u limits
一样。在C++11之前,你不能将两者结合起来。
numeric\u limits
不会在编译时计算