gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:35:00 25 4
gpt4 key购买 nike

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

我在一个类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com