gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:01:52 26 4
gpt4 key购买 nike

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/

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