我在C++中有一个映射,我希望输入我的类作为值,输入一个字符串作为键。当我尝试这样做时,我得到了一个错误'Scene_Branding' : illegal use of this type as an expression我得到了一个非法使用这个类型作为表达式,我似乎找不到原因。下面是一些代码。
string CurrentScene = "Scene_Branding";
map<string, Scene> Scenes;
Scenes.insert(std::make_pair("Scene_Branding", Scene_Branding)); //<-- Illegal Error parameter 2这是Scene Branding标题。
#ifndef Scene_Branding_H
#define Scene_Branding_H
#include "Scene.h"
#include <iostream>
#include <string>
class Scene_Branding : Scene
{
public:
Scene_Branding();
~Scene_Branding();
void Draw();
};
#endif这是场景标题..
#ifndef Scene_H
#define Scene_H
#include <iostream>
#include <string>
class Scene
{
public:
Scene();
~Scene();
virtual void Draw();
};
#endif这是cpp文件。
场景cpp。
#include "Scene.h"
Scene::Scene()
{
}
Scene::~Scene()
{
}
void Scene::Draw(){
std::cout << "Hey";
}Scene_Branding cpp
#include "Scene_Branding.h"
Scene_Branding::Scene_Branding()
{
}
Scene_Branding::~Scene_Branding()
{
}
void Scene_Branding::Draw()
{
std::cout << "Drawing from Scene_branding";
}发布于 2010-02-17 22:34:39
首先,不要将对象本身存储在地图中,而是存储指向对象的指针。
其次,您需要为std::make_pair提供一个Scene_Branding实例,而不是类本身。
编辑:下面是存储指针的方法:
string CurrentScene = "Scene_Branding";
map<string, Scene*> Scenes;
Scenes.insert(std::make_pair("Scene_Branding", new Scene_Branding()));但是,既然您提出了这种类型的问题,我建议您阅读一本好的c++书籍,以便进一步掌握指针等概念。
发布于 2010-02-17 22:36:12
尝试:
Scenes.insert(std::make_pair("Scene_Branding", Scene_Branding()));发布于 2010-02-17 22:58:53
我想你不会想这么做的。
boost::ptr_map ,请改用它
所以,“新”代码:
class Scene
{
public:
virtual ~Scene(); // Virtual Destructor, it's a base class
virtual Scene* clone() const = 0; // Polymorphic construction
private:
// whatever you wish
};
class Scene_Branding: public Scene
{
public:
virtual Scene_Branding* clone() const { return new Scene_Branding(); }
};以及存储这些数据的新方法:
const std::string SceneBrandingKey = "Scene_Branding";
typedef boost::ptr_map<std::string, Scene> scenes_type;
scenes_type Scenes;
Scenes.insert(SceneBrandingKey, new Scene_Branding());你可以这样使用它:
Scenes["Scene_Branding"].process(); // Note: use '.' not '->'关于Boost Pointer Container的好处是,它是为多态类型设计的,具有异常安全性和所有功能,但它模仿了STL的行为/接口,这样您就不会迷失方向了:)
https://stackoverflow.com/questions/2281420
复制相似问题