gpt4 book ai didi

C++ STL 映射 : insert is storing null pointers

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:20:08 27 4
gpt4 key购买 nike

我有一个简单的类

    class symbol_entry
{
private:
static unsigned long uid;

public:
std::string name;
std::string filename;
unsigned int line_number;
unsigned int column_number;
symbol_entry* parent_symbol;
std::map<const char*,symbol_entry*> child_symbols;
unsigned long type_flags;

public:
symbol_entry();
symbol_entry(const char* name,
const char* filename,
int line_number,
int column_number,
symbol_entry* parent_symbol,
unsigned long type_flags);
~symbol_entry();

symbol_entry* get_child(const char* name);
bool put_child(symbol_entry* child);
};

这里是symbol_entry::put_child的实现;

bool symbol_entry::put_child(symbol_entry* child)
{
if(child_symbols[child->name.c_str()])
return false;
child_symbols.insert(std::make_pair(child->name.c_str(),child));
return true;
}

每当我执行这样的测试时;

symbol_entry* tsym=new symbol_entry("test","$",0,0,0,0);
symbol_entry* tcsym=new symbol_entry("test_child","$",0,0,0,0);
tsym->put_child(tcsym);
std::cout<<tsym->child_symbols.begin()->first<<" => "<<tsym->child_symbols.begin()->second<<std::endl;

child_symbols.begin()->second 是存储一个空指针。我无法解决这个问题,并尝试了很多变体,包括 const 和引用资料。

最佳答案

child_symbols[child->name.c_str()] 将始终创建并返回一个新的映射条目(一个 NULL 条目),然后 child_symbols.insert(...) 不执行任何操作(因此映射中的值保持为 NULL)。检查键是否已经在映射中的正确方法是使用find:

if (child_symbols.find(...) != child_symbols.end()) // already exists

关于C++ STL 映射 : insert is storing null pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6317683/

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