c++ - 将元素添加到 std::map 时遇到问题

标签 c++ stdmap

Foo.h :

class Foo
{
public:
    Foo(void);
    ~Foo(void);   

    void AddScreen(std::string name, ScreenBase &screenToAdd);

private:

    std::map<std::string, ScreenBase> m_screens;
};

Foo.cpp :

void Foo::AddScreen(string name, ScreenBase &screenToAdd)
{
    m_screens[name] = screenToAdd; 
}

最后一行产生编译错误 C2784: 'bool std::operator <(const std::_Tree<_Traits> &,const std::_Tree<_Traits> &)' : could not deduce template argument for 'const标准::

注释掉最后一行,编译成功。

我是 c++ 的新手(来自托管语言),不知道为什么我不能用它填充 map 。

任何见解都值得赞赏。谢谢。

ScreenBase.h :

    #pragma once
    class ScreenBase
    {
    public:
        ScreenBase();
        ~ScreenBase();

        virtual void Update(float tt, float dt);
        virtual void Render();
    };

屏幕基础.cpp :

#include "pch.h"
#include "ScreenBase.h"

ScreenBase::ScreenBase(void)
{
}
ScreenBase::~ScreenBase(void)
{
}
void ScreenBase::Update(float tt, float dt)
{

}
void ScreenBase::Render()
{

}

最佳答案

您忘记将以下行添加到 Foo.cpp

#include <string>

这应该可以解决问题。

修复它的原因是因为 2 std::string 之间的“<”运算符对象在那里定义。自 std::map是一个关联数组,它将使用您指定的特定排序函数(作为模板的第三个参数,例如 std::map<int, MyObj, MyIntCompareFunctor> )对键进行排序,或者默认使用键类型的 < 运算符,在您的情况下是std::string .

附言此外,通过引用传递字符串,而不是值: 例如void foo(const std::string& bar){};

关于c++ - 将元素添加到 std::map 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10677782/

相关文章:

c++ - 函数重载

python - 执行最佳循环排序知道最后的顺序

c++ - 使用 CLion IDE 运行 Opengl 程序

c++ - 如何合并两个 STL 映射?

c++ - 两个智能指针之间的引用

c++ - 这是变量还是函数

c++ - 如何根据过去在 C++ 中的成功获得具有自适应排序的整数集合?

c++ - 迭代 std::pair<string, some_struct >* 的 vector 时使用结构绑定(bind)

c++ - 包含对的 multimap ?

c++ - 如何使用 std::map 从模板中获取数据类型