c++ - 类没有合适的运算符->

标签 c++ visual-studio-2010 dictionary operator-overloading

我正在尝试实现无锁映射,但遇到了问题。

在我的迭代器类中,我实现了一个 operator->免费获得firstsecond :

_t_iterator_return<_Kty, _Ty> operator->()
{
    _t_iterator_return<_Kty, _Ty> tmp((int&)Cur->getKey(), Cur->getValue());
    return tmp;
}

这是:

template <class _Kty, class _Ty>
struct _t_iterator_return
{
    _Kty& first; // key
    _Ty& second; // val

    _t_iterator_return(_Kty& k, _Ty& v) : first(k), second(v) {}
};

看起来很正常,不是吗?但在我的main()这个:

for(LFMap<int, stringc>::iterator it = m.begin(); !it.end(); ++it)
    fprintf(mres, "K: %7d     V: %s\n", it->first, it->second.c_str());

导致编译时错误:error C2819: type 'lightforce::core::LFMap<_Kty,_Ty>::_t_iterator_return<_Kty,_Ty>' does not have an overloaded member 'operator ->'

尽管如此,这段代码:

for(LFMap<int, stringc>::iterator it = m.begin(); !it.end(); ++it)
        fprintf(mres, "K: %7d     V: %s\n", it.operator->().first, it.operator->().second.c_str());

已经编译成功,运行良好!为什么 ->不工作,但是 operator->是吗?

最佳答案

C++11 §13.5.6 [over.ref] 第 1 段指出:

... An expression x->m is interpreted as (x.operator->())->m for a class object x of type T if T::operator->() exists and if the operator is selected as the best match function by the overload resolution mechanism (13.3).

由于您从 operator-> 返回的类型- _t_iterator_return<_Kty, _Ty> - 没有 operator ->它不能被取消引用。

添加 operator ->_t_iterator_return简单地返回 this :

_t_iterator_return* operator->()
{
    return this;
}

关于c++ - 类没有合适的运算符->,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433791/

相关文章:

c++ - 如何 Hook 时间功能

javascript - 在 Native Client 和 JavaScript 中访问相同的文件

c++ - 注册 Microsoft All-In-One 框架提供的 Windows 上下文菜单处理程序(CppShellExtContextMenuHandler 项目)

java - 从 Map<Integer, String> 中检索键在特定范围内的所有条目

python - 根据条件从Python字典中选择特定范围的元素

C++对象,成员的内存位置偏移

c++ - openssl哈希产生部分不同的输出 - C++ ubuntu

c# - 发布期间出错无法删除目录 "bin\Debug\app.publish\"

c++ - boost 变体 istringstream 和流错误

swift - 如何通过 Swift 中的函数传递字典键以返回作为数组的值