gpt4 book ai didi

c++ - 奇怪的编译器错误,指出我的迭代器未定义

转载 作者:太空狗 更新时间:2023-10-29 20:46:06 26 4
gpt4 key购买 nike

我正在尝试创建一个模板函数,它将遍历映射的指定键/值对,并检查是否存在函数参数中指定的任何键。

实现如下所示:

代码

template < class Key, class Value >
bool CheckMapForExistingEntry( const std::map< Key, Value >& map, const std::string& key )
{
std::map< Key, Value >::iterator it = map.lower_bound( key );
bool keyExists = ( it != map.end && !( map.key_comp() ( key, it->first ) ) );
if ( keyExists )
{
return true;
}
return false;
}

然而,无论出于何种原因,我似乎无法弄清楚为什么我的代码无法编译。我得到这些错误:

error: expected ';' before 'it'
error: 'it' was not declared in this scope

我以前遇到过这些问题,但这些问题通常是由于我犯了很容易发现的错误。这里会发生什么?

最佳答案

很确定您需要 typename限定词:

template < class Key, class Value >
bool CheckMapForExistingEntry( const std::map< Key, Value >& map, const std::string& key )
{
typename std::map< Key, Value >::iterator it = map.lower_bound( key );
bool keyExists = ( it != map.end && !( map.key_comp() ( key, it->first ) ) );
if ( keyExists )
{
return true;
}
return false;
}

This article解释得相当详细。

实际上,编译器知道可能存在 std::map< Key, Value > 的特化。对于 Key 的某些值和 Value其中可能包含 static名为 iterator 的变量.所以它需要 typename限定符以确保您实际上在这里指的是一个类型,而不是某个假定的静态变量。

关于c++ - 奇怪的编译器错误,指出我的迭代器未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9041098/

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