我不得不说我不是使用STL的专家.这是我的问题,我有一个名为LdapClientManager的类,它维护了许多由ID管理的LDAP客户端.持有LdapClients的容器被声明为成员变量ie
typedef std::map<int, LdapClient *> LdapClientMap;
LdapClientMap _ldapClientMap;
Run Code Online (Sandbox Code Playgroud)
以下函数无法使用错误进行编译:
LdapClient * LdapClientManager::getLdapClient(unsigned int templateID)
{
// Do we have an LdapClient
LdapClientMap::const_iterator it = _ldapClientMap.find(templateID);
if (it == std::map::end) {
// no existing client, lets create it
LdapClient * ldapClient = new LdapClient();
if (ldapClient == NULL) {
// TODO: handle out of memory condition
}
_ldapClientMap[templateID] = ldapClient;
return ldapClient;
}
return it->second;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我在编译时遇到以下错误,这是什么意思.我还没有在谷歌找到解决方案.
LdapClientManager.cc:在LdapClient*
LdapClientManager::getLdapClient(unsigned int)':
LdapClientManager.cc:33:
没有模板参数的情况下使用的成员函数模板类std :: map'
ava*_*kar 11
替换std::map::end
为_ldapClientMap.end()
.此外,new
永远不会返回0,如果分配失败,它会抛出异常.
请注意,程序可以缩短.
LdapClient * LdapClientManager::getLdapClient(unsigned int templateID)
{
LdapClient *& value = _ldapClientMap[templateID];
if (value == 0)
value = new LdapClient();
return value;
}
Run Code Online (Sandbox Code Playgroud)