我有一个unordered_map对象,我将其填充到某处,当我查找放置的内容时,地图为空。
我有一个ClassA
对象,其中有一个ClassB
私有成员。 ClassB
有一个ClassC*
的私有成员和一个unordered_map<std::string, ClassC*>
私有成员。它还具有公共功能insertClassC(std::string name, ClassC* o)
和setActiveClassC(std::string name)
。我的main()
函数有一个ClassC
对象,调用insertClassC()
,然后调用setActiveClassC()
。
int main()
{
ClassC mainClassC;
try
{
ClassA app;
app.getClassB().insertClassC("main", &mainClassC);
app.getClassB().setActiveClassC("main");
} catch (const std::exception& e)
{
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
ClassB ClassA::getClassB()
{
return classBObject; // private member of ClassA
}
void ClassB::insertClassC(std::string name, ClassC* o)
{
// classCMap is an unordered_map<std::string, ClassC*>, private member of ClassB
classCMap.insert(std::pair<std::string, ClassC*> (name, o));
}
void ClassB::setActiveClassC(const std::string name)
{
std::unordered_map<std::string, ClassC*>::const_iterator res = classCMap.find(name);
if(res == classCMap.end())
{
char err [50];
sprintf(err, "ClassC \"%s\" could not be found", name.c_str());
throw std::runtime_error(err);
}
active = res->second;
}
我希望该程序返回EXIT_SUCCESS
,但它返回EXIT_FAILURE
并打印到stderr:
ClassC "main" could not be found
调试时,可以看到classCMap
的大小在insertClassC()
调用结束时为1,但是在我调用setActiveClassC()
时为0。
我怀疑我对指针的理解是错误的(我是C ++的初学者),所以我读了一些有关该知识的文章,但我仍然不理解我的错误。
答案 0 :(得分:2)
好的,所以我决定发表评论:
您的功能
ClassB ClassA::getClassB()
{
return classBObject; // private member of ClassA
}
具有返回类型ClassB
,这意味着它会复制您的私人成员。
但是,由于您要修改成员,因此需要返回对该成员的引用,即您必须编写
ClassB& ClassA::getClassB()
{
return classBObject; // private member of ClassA
}
注意返回类型上的与号。