c++ - 表达式未计算为常量 - 使用另一个类中的常量

标签 c++ class constants

[我的代码非常大,所以我只粘贴了与我相关的部分,如果您需要查看更多,请告诉我,谢谢]

我在一个类(Animation)中定义了一个常量,但现在我将该类一分为二(AnimationsDefinition 和 AnimationsInstance),我不能从一个类到另一个类使用该常量

我在 AnimationsInstance.h 之前包含了 AnimationsDefinition.h

common.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 :

An inline static data member may be defined in the class definition and may specify a brace-or-equal-initializer.

关于c++ - 表达式未计算为常量 - 使用另一个类中的常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55000525/

相关文章:

c++ - 如何让Qwt接受触摸和多点触摸事件?

c++ - 将 Qt 应用程序的状态保存到文件中

c++ - 无法将参数从 'LPITEMIDLIST *' 转换为 'LPCITEMIDLIST *'

c++ - 如何限制 "using namespace ..."的范围? C++

c++ - SFML 在另一个类中绘制移动 Sprite

c++ - 为什么复制到的对象必须与复制自的对象具有相同的低级别常量?

c++ - 为什么以下 C++ 代码无法编译?

c++ - 分离类时,在 cpp 文件中使用函数会导致错误

java - 安卓java : accessing class that has parentActivity

variables - 为什么我必须为 "const"变量指定类型而不是 "let"变量?