【发布时间】:2018-08-20 09:18:40
【问题描述】:
每当我想直接迭代函数返回的数据时,eclipse CDT 的索引器无法正确识别 foreach 循环中所需的“结束”和“开始”符号。当我第一次将结果放入临时变量时它就起作用了。
MWE:
#include "mwe.h"
int main(int argc, char **argv) {
auto tmp = do_something();
for(auto &x : tmp){ } //Working
for(auto &x : do_something()){ } //Symbol 'end'/'begin' could not be resolved
}
mwe.h:
#include<iterator>
class X { };
class Handle { };
class MyIterator: public std::iterator<X, std::input_iterator_tag> {
public:
explicit MyIterator(Handle &iter) : iter_(&iter) { }
MyIterator() { }
MyIterator &operator++() { return *this; }
MyIterator operator++(int) { return *this; }
X &operator*() { return x; }
X *operator->() { return &**this; }
friend bool operator==(MyIterator a, MyIterator b) { return true; }
friend bool operator!=(MyIterator a, MyIterator b) { return false; }
private:
Handle *iter_;
X x;
};
inline MyIterator begin(Handle &it) { return MyIterator(it); }
inline MyIterator end(Handle &) { return MyIterator(); }
Handle do_something() { return Handle(); }
代码编译并且没有错误,只有索引器告诉我它没有找到符号。也就是说,解决问题并不是真正必要的,但它很烦人。
附加说明:我已经检查了许多其他关于 CDT 索引器的问题,但答案并没有解决我的问题:
Eclipse CDT Indexer does not fully recognize c++11
Eclipse CDT: Symbol 'cout' could not be resolved
https://www.eclipse.org/forums/index.php/t/636348/
代码有问题还是 CDT 中的(已知)错误?
【问题讨论】:
标签: c++11 foreach eclipse-cdt