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++ - 为什么 const int 适合 char 大括号 init?

c++ - 为什么要进行三个比较才能添加第二个 map 元素?

c++ - 使用 XCode/Clang 使用 std::shared_ptr 实例化 std::map 时出错

c++ - 使用 operator[] 插入时不同的 std::map 大小(vc++ vs g++)

c++ - 为什么 'acquire/release'在c++11中不能保证顺序一致性?

C++ 如何在不使用 winapi 的情况下 move 文件并将它们从一个磁盘复制到不同的磁盘?

c++ - 如何检测一个方法是否是虚拟的?

c++ - Webkit GTK : Using the DOM Tree Walker

c++ - 使用 std::map 时无法捕获未处理的异常

c++ - std::map 中原始类型的值是否已初始化?