簡體   English   中英

reverse_iterator 的歧義 != 運算符

[英]Ambiguous != operator for reverse_iterator

當我在以下代碼中反向迭代地圖時:

    std::map<Version, VersionBatch>::reverse_iterator versionBatch = self->versionBatches.rbegin();
    for (; versionBatch != self->versionBatches.rend(); versionBatch++) {
        self->batch[batchIndex] = Reference<MasterBatchData>(new MasterBatchData());
        self->batchStatus[batchIndex] = Reference<MasterBatchStatus>(new MasterBatchStatus());
        fBatches.push_back(distributeWorkloadPerVersionBatch(self, batchIndex, cx, request, versionBatch->second));
        batchIndex--;
    }

我從 CMake 得到錯誤。 似乎reverse_iterator可以被utilityiterator解釋,這會導致編譯器混淆。 有沒有辦法消除歧義?

Users/ciuser/jenkins/foundationdb-ci.foundationdb.org/workspace/jobs/prb-cmake-macos/fdbserver/RestoreMaster.actor.cpp:276:22: error: use of overloaded operator '!=' is ambiguous (with operand types 'std::map<Version, VersionBatch>::reverse_iterator' (aka 'reverse_iterator<__map_iterator<__tree_iterator<std::__1::__value_type<long long, VersionBatch>, std::__1::__tree_node<std::__1::__value_type<long long, VersionBatch>, void *> *, long> > >') and 'std::__1::map<long long, VersionBatch, std::__1::less<long long>, std::__1::allocator<std::__1::pair<const long long, VersionBatch> > >::reverse_iterator' (aka 'reverse_iterator<__map_iterator<__tree_iterator<std::__1::__value_type<long long, VersionBatch>, std::__1::__tree_node<std::__1::__value_type<long long, VersionBatch>, void *> *, long> > >'))
                        for(;versionBatch != self->versionBatches.rend();versionBatch++) {
                             ~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Library/Developer/CommandLineTools/usr/include/c++/v1/utility:218:1: note: candidate function [with _Tp = std::__1::reverse_iterator<std::__1::__map_iterator<std::__1::__tree_iterator<std::__1::__value_type<long long, VersionBatch>, std::__1::__tree_node<std::__1::__value_type<long long, VersionBatch>, void *> *, long> > >]
operator!=(const _Tp& __x, const _Tp& __y)
^
/Library/Developer/CommandLineTools/usr/include/c++/v1/iterator:710:1: note: candidate function [with _Iter1 = std::__1::__map_iterator<std::__1::__tree_iterator<std::__1::__value_type<long long, VersionBatch>, std::__1::__tree_node<std::__1::__value_type<long long, VersionBatch>, void *> *, long> >, _Iter2 = std::__1::__map_iterator<std::__1::__tree_iterator<std::__1::__value_type<long long, VersionBatch>, std::__1::__tree_node<std::__1::__value_type<long long, VersionBatch>, void *> *, long> >]
operator!=(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y)
^
1 error generated.

非常感謝!

在 comment 中指出的某處using std::rel_ops ,從棄用。 std::rel_ops

一種在本地解決的方法是顯式調用==

在 for 循環中,您有以下條件:

versionBatch != self->versionBatches.rend()

而是寫成

!(versionBatch == self->versionBatches.rend())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM