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/