ai didi

c++ - 无法在 C++ map 容器中输入正确的元素

转载 作者:行者123 更新时间:2023-11-28 00:56:08 24 4
gpt4 key购买 nike

我有代码:

string key = "", value = "", type = "";
while(in)
{
getline(in, key, '=');
getline(in, value, '\n');
getline(in, type, '\n');
in.get(); // get the dividing empty line
CommonParamValue *paramValue = CreateParamValue(type);
paramValue->SetValue(value);
params.insert(make_pair(key, *paramValue)); // PROBLEM
delete paramValue;
}

当我调用 params.insert(make_pair(key, *paramValue)); 时,我得到一个具有正确键结束 EMPTY 值的映射元素。当我检查

paramsIter = params.find(paramKey);
if (paramsIter != params.end())
{
if( ("" == paramsIter->second.GetValue())
...
}

所有时间条件""== paramsIter->second.GetValue()为真,但一定不是这样!附加信息:

class CommonParamValue
{
public:
virtual void SetValue(string value){}
virtual string GetValue(){ return ""; }
};
class StringParamValue : public CommonParamValue
{
string str;
public:
StringParamValue(){}
virtual void SetValue(string value){str = value;}
virtual string GetValue() {return str;}
};
CommonParamValue* Report::CreateParamValue(const string &strType) const
{
if (strType == "int")
{
return (new IntParamValue());
}
else if(strType == "string")
{
return (new StringParamValue());
}
else
{
// error
exit(1);
}
}

问题是为什么当我执行 params.insert(make_pair(key, *paramValue)); 时,我总是得到一个具有正确键和 EMPTY 值的元素?怎么了?

最佳答案

我怀疑 map 声明为:

std::map<std::string, CommonParamValue> params;

插入将导致将值切片为 CommonParamValue,它始终从 GetValue() 返回 ""。要获得所需的行为,map 中的值需要是指向 CommonParamValue 的指针,最好是智能指针:

std::map<std::string, std::shared_ptr<CommonParamValue> > params;

关于c++ - 无法在 C++ map 容器中输入正确的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116511/

24 4 0
文章推荐: c++ - 如何 "guess"缺少哪些库?
文章推荐: c++ - 结构中的结构数组,C++ 代码
文章推荐: c++ - 虚拟基类对象创建
文章推荐: c++ - 在多个键下将项目存储在 map 中
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com