2013-12-18 44 views
0

我有这样的代码的选项错误 “无效操作数的二进制表示”

class Options { 
    ... 
    hash_map<string, Option> options; 
    private: 
    .... 
} 

的XCode(这是我使用的IDE),标志着该地区“ITER

void Options::printHelp() { 
    hash_map<string, Option>::iterator iter; 
    for (iter = options.begin(); iter != options.end(); iter++) { //<- this one 
     cout << iter->first; 
     cout << "\t"; 
     cout << iter->second.getDescription() << "\n"; 
    } 
} 

定义!= options.end()“,并给我在标题中指定的错误。 我似乎无法弄清楚为什么。 (可选,顺便说一句,是一个小的容器类,可以容纳2个字符串和一个枚举)

+0

为了上帝的缘故,使用typedef,你喜欢输入hash_map :: iterator,如果你需要改变容器类型搜索和替换到处? – Slava

+1

“选项”的完整定义是什么?如果你使用C++ 11,你可以使用'auto'让你的生活变得更容易。 – detunized

+0

不是说这会解决你的问题,但你应该预先增加interators(++ iter)。 – IdeaHat

回答

2

很难说没有看到options的定义究竟是什么问题。我的猜测是这不是hash_map<string, Option>类型。

如果你尽管写你的代码像这样,你不应该运行到诸如此类的问题:

for (auto iter = options.begin(), end = options.end(); iter != end; ++iter) { 
    cout << iter->first; 
    cout << "\t"; 
    cout << iter->second.getDescription() << "\n"; 
} 

甚至更​​好:

for (auto &i: options) 
    cout << i.first << '\t' << i.second.getDescription() << '\n'; 

这就要求C++ 11 。

相关问题