表达不会使用另一类的常数评估为常数
expression did not evaluate to a constant - using constant from another class
[我的代码很安静,所以我只粘贴了似乎与我相关的部分,只需告诉我您是否需要查看更多,谢谢]
我在类(动画)中定义了一个常数,但现在我将类分为两个(AnimationsDefinition& AnimationSincance),我无法将该常数从一个类中使用到另一个类
我在AnimationsInstance.H
之前包括AnimationsDefinition.hcommon.h
#include "animationsDefinition.h"
#include "animationsInstance.h"
编译器抱怨无法评估常数
以下代码曾经工作,但是现在我在另一类中使用它,它不再起作用
我遇到的错误:
error C2131: expression did not evaluate to a constant
note: failure was caused by non-constant arguments or reference to a non-constant symbol
note: see usage of 'EAST'
AnimationsDefinition.cpp
#include "common.h"
const int AnimationsDefinition::WEST = 0;
const int AnimationsDefinition::SOUTH = 1;
const int AnimationsDefinition::NORTH = 2;
const int AnimationsDefinition::EAST = 3;
...
AnimationsDefinition.h
#pragma once
class AnimationsDefinition
{
public:
static const int WEST;
static const int SOUTH;
static const int NORTH;
static const int EAST;
...
AnimationsInstance.cpp
#include "common.h"
void AnimationsInstance::update(float tpf)
{
switch (direction)
{
case AnimationsDefinition::EAST: <<<<<<<<< compilation error
{
...
任何帮助
问候
您可以在类本身中初始化static const
变量。
class AnimationsDefinition
{
public:
static const int WEST = 0;
static const int SOUTH = 1;
static const int NORTH = 2;
static const int EAST = 3;
};
但是,如果您想避免违反ODR,则需要正确定义它们。
因此,请使用constexpr
指示符,这意味着static
数据成员的inline
。可以在类定义本身中定义inline static
数据成员。
class AnimationsDefinition
{
public:
static constexpr int WEST = 0;
static constexpr int SOUTH = 1;
static constexpr int NORTH = 2;
static constexpr int EAST = 3;
};
根据[class.static.data]/3:
可以在类别定义中定义内联静态数据成员,并可以指定括号或平等启用器。
const变量只有在遇到其初始分散器后才可以用作常数。在这种情况下,可以通过将初始评估器移动到标题中来实现。
请注意,将初始化器移至标题类别中的类别中的声明中,并不能使声明变成变量的定义。这些定义仍然必须保留在源文件中,而没有初始评估器。
好吧,我发现我可以在班级本身中定义这些,因为它们是静态的
您只有在将其声明inline
。
但是,对于开关案例,使用(范围)枚举更常规。
相关文章:
- 如何创建从同一类继承的不同对象的向量
- 获取从C++中同一类中的构造函数调用的方法返回的值
- C++如何将同一类的实例作为属性
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- C++交换来自同一类成员的参数值,处理多个类
- 使用同一类中的方法重新分配字段时出现问题
- 为什么 g++ 使用 movabs 和一个奇怪的常数来简单还原?
- 类成员函数无法访问同一类的私有结构节点?
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 有没有办法从同一类中的函子调用类方法?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 为什么在C++负数static_cast如果<unsigned>数字是常数,则不同
- 同一类的两个对象相互引用
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- 表达式必须具有常数值,变量不能用作定义数组大小的常数
- 如何将一个类的成员函数用作另一类的友元函数
- Poco 计时器,具有来自同一类的回调
- 如何获取同一类函数中类成员的函数指针?
- 表达不会使用另一类的常数评估为常数