gpt4 book ai didi

C++ 为什么我不能使用在声明它的类之外全局声明的枚举?

转载 作者:搜寻专家 更新时间:2023-10-31 01:22:23 27 4
gpt4 key购买 nike

现在,我的项目有两个类和一个主类。由于这两个类相互继承,因此它们都使用前向声明。在第一个对象中,就在#include 语句下面,我在类定义之前初始化了两个枚举。我可以在该类中很好地使用两个枚举。但是,如果我尝试在另一个继承自第一个类的类中使用这些枚举,则会收到一条错误消息,指出尚未声明枚举。如果我尝试在第二个类中重新定义枚举,则会出现重新定义错误。

我什至尝试过使用我刚读到的技巧,并将每个枚举放在自己的命名空间中;那没有改变任何东西。

这是一个例子:

#ifndef CLASSONE_H
#define CLASSONE_H

namespace Player
{
enum Enum
{
One,
Two,
};
}

#endif

然后在第二个类中,我尝试使用之前声明的枚举:

void AddPlayer(Player::Enum playerNumber);

而是收到一条错误消息,提示“Player”尚未声明。

最佳答案

我不确定你在没有看到你的代码的情况下遇到了什么问题,但是这个编译:

enum OutsideEnum
{
OE_1,
OE_2,
};

namespace ns
{
enum NSEnum
{
NE_1,
NE_2,
};
}

class Base
{
public:
enum BaseEnum
{
BE_1,
BE_2,
};

void BaseFunc();
};

class Derived
{
public:
enum DerivedEnum
{
DE_1,
DE_2,
};

void DerivedFunc();
};

void Base::BaseFunc()
{
BaseEnum be = BE_1;
Derived::DerivedEnum de = Derived::DE_1;
OutsideEnum oe = OE_1;
ns::NEEnum ne = ns::NE_1;
}

void Derived::DerivedFunc()
{
Base::BaseEnum be = Base::BE_1;
DerivedEnum de = DE_1;
OutsideEnum oe = OE_1;
ns::NEEnum ne = ns::NE_1;
}

int main()
{
Base::BaseEnum be = Base::BE_1;
Derived::DerivedEnum de = Derived::DE_1;
OutsideEnum oe = OE_1;
ns::NEEnum ne = ns::NE_1;
}

在类定义中定义枚举需要注意两点:

  1. 如果您希望它公开可用,请确保将其声明为公开。
  2. 当从定义它的类以外的任何地方引用它时,使用类名来限定枚举的名称和值。

编辑:

好的,问题与枚举无关,而是包含顺序,当你有一个基类和一个派生类时,只有派生类需要知道基类:

基类标题:

#ifndef BASE_H
#define BASE_H

enum BaseEnum
{
};

class Base
{
};
#endif

派生类头:

#ifndef DERIVED_H
#define DERIVED_H

#include "Base.h"

class Derived
{

void Func(BaseEnum be);
};
#endif

关于C++ 为什么我不能使用在声明它的类之外全局声明的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2886800/

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