gpt4 book ai didi

C++将类插入 map 容器

转载 作者:IT老高 更新时间:2023-10-28 21:38:16 24 4
gpt4 key购买 nike

我有一个 C++ 映射,我希望输入我的类作为值,并输入一个字符串作为键。当我尝试这样做时,我得到一个错误 'Scene_Branding' : 非法使用这种类型作为表达式我非法使用这种类型作为表达式,我似乎无法找出原因。这是一些代码。

 string CurrentScene = "Scene_Branding";
map<string, Scene> Scenes;
Scenes.insert(std::make_pair("Scene_Branding", Scene_Branding)); //<-- Illegal Error parameter 2

这里是场景品牌标题..

#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";
}

最佳答案

首先,不要将对象本身存储在 map 中,而是存储指向对象的指针。

其次,您需要将 Scene_Branding 的实例提供给 std::make_pair,而不是类本身。

编辑:以下是存储指针的方法:

 string CurrentScene = "Scene_Branding";
map<string, Scene*> Scenes;
Scenes.insert(std::make_pair("Scene_Branding", new Scene_Branding()));

但是,既然你问了这种类型的问题,我建议你阅读一本好的 c++ 书籍,以进一步掌握指针等概念。

关于C++将类插入 map 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281420/

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