将枚举作为参数传递
Passing an enum as a parameter
我有一个Weapon.h/cpp类。它有一个枚举
Weapon.h
enum WEAPONTYPE {
LASER,
ROCKET
}
我有一个变量,我想用它来跟踪当前枚举。
WEAPONTYPE currentWeapon;
我有一个函数,它将被调用来更改当前的Weapon值。头文件中的声明是:
void weaponSelect(WEAPONTYPE choice);
.cpp文件中的声明是
void Weapon::weaponSelect(Weapon::WEAPONTYPE enumChoice)
{
currentWeapon = enumChoice;
}
现在我收到的错误是:
错误C2511:"无效武器::weaponSelect(武器::WEAPONTYPE)":在"武器"中找不到重载的成员函数
感谢您的帮助。
编辑1:
武器.h
#ifndef WEAPON_H_
#define WEAPON_H_
class Weapon
{
public:
Weapon(Ogre::SceneManager* localManager);
virtual ~Weapon(void);
void createBullet(Ogre::Vector3 cameraPosition); //Create bullet nodes/entities.
void weaponSelect(WEAPONTYPE enumChoice); //Function to select weapon type. Tried to have "WeaponType enumChoice" as parameter but would produce error.
void updateBullet(); //Update bullet logic.
enum WEAPONTYPE {
LASER = 0,
ROCKET = 1
};
private:
WEAPONTYPE currentWeapon; //Enum var to track weapon selected.
Ogre::SceneManager* localBulletSceneManager; //Pointer to our application's scene manager
std::vector<Ogre::SceneNode*> bullets; //List of pointers to the bullet nodes.
};
#endif
Weapon.cpp
#include "Weapon.h"
#include <OgreStringConverter.h>
using Ogre::SceneNode;
using Ogre::Entity;
using Ogre::String;
using Ogre::Vector3;
Weapon::Weapon(Ogre::SceneManager* localManager)
: localBulletSceneManager(nullptr)
, currentWeapon(LASER)
{
this->localBulletSceneManager = localManager;
}
Weapon::~Weapon(void)
{
}
void Weapon::weaponSelect(WEAPONTYPE enumChoice)
{
this->currentWeapon = enumChoice;
}
void Weapon::createBullet(Vector3 cameraPosition)
{
//Pointers to use for Quick Node and Entity Creation - Get Reused once object is attached to scene.
SceneNode* tempNode = nullptr;
Entity* tempEntity = nullptr;
//All our Objects are spheres, so create one mesh and reuse it with each entity.
String bulletMesh = "Bullet";
//Procedural::SphereGenerator().setRadius(1.f).setUTile(5.).setVTile(5.).realizeMesh(bulletMeshName);
Procedural::ConeGenerator().setRadius(0.5F).setHeight(3.0F).realizeMesh(bulletMesh);
for (int bulletAmount = 0; bulletAmount < 10; ++bulletAmount)
{
tempNode = this->localBulletSceneManager->getRootSceneNode()->createChildSceneNode("RocketNode" + Ogre::StringConverter::toString(bulletAmount));
tempEntity = this->localBulletSceneManager->createEntity("RocketEntity" + Ogre::StringConverter::toString(bulletAmount), bulletMesh);
//tempEntity->setMaterial(
tempNode->attachObject(tempEntity);
tempNode->setPosition(0,0,100 + (bulletAmount * 10));
}
switch (this->currentWeapon)
{
case LASER:
break;
case ROCKET:
break;
}
}
编辑2:将.h和.cpp中void weaponSelect的声明还原为原始版本,没有其他海报建议的任何更改。
将WEAPONTYPE
声明移动到类的顶部:
class Weapon {
public:
enum WEAPONTYPE {
LASER = 0,
ROCKET = 1
};
Weapon(Ogre::SceneManager* localManager);
// ...
错误的原因是当编译器读取以下行时:
void weaponSelect(WEAPONTYPE enumChoice);
它不知道WEAPONTYPE
是什么。这是因为enum
的声明在类的后面。
此外,我看到您正在使用C++11:使用enum class
代替
enum class weapon {
laser,
rocket
};
如果WEAPONTYPE在类外声明,请使用以下语法:
void Weapon::weaponSelect(WEAPONTYPE enumChoice)
{
currentWeapon = enumChoice;
}
如果此枚举是在类中声明的:
void Weapon::weaponSelect(Weapon::WEAPONTYPE enumChoice)
{
this->currentWeapon = enumChoice;
}
在使用枚举之前必须声明它。
尝试将枚举WEAPONTYPE
移动到weaponSelect
减速之前另外,我不理解你的API:一方面,您将weaponSelect
声明为公共。但是,它的参数是受保护的枚举。你班的cau用户如何使用它?这些都应该具有相同的可访问性/。
相关文章:
- 有没有办法使用类的私有枚举值作为模板参数?
- 将枚举传递到不同文件中的对象中
- 从可变参数创建枚举?
- C++ 在C++中通过引用将枚举作为默认参数传递时出错
- 如何将枚举传递到模板参数
- 从枚举类值模板参数推断枚举类类型
- 在这个简单的示例中,我如何通过参考来传递枚举
- 是否可以将非枚举值作为枚举函数参数传递
- 将枚举作为参数传递
- 将枚举作为函数参数传递
- 传递枚举数组是什么意思
- 在构造函数中传递枚举作为参数
- QT:将强类型枚举参数传递到插槽
- 为什么当枚举或 int 值作为函数的参数传递时,gcc 没有发出警告?
- 使用可变参数模板参数构建枚举
- 类方法上的C++类型特征:如果参数为枚举,则部分专用化
- 哪个参数描述枚举
- 通过模板模板参数使用枚举标记对象
- 根据模板参数选择枚举类型
- 传递枚举类型作为参数?c++