摘要:我有一个代码片段,可以用 g++ 编译,但不能用 clang。
详情:
我有一个项目可以用 g++ 很好地编译,但是当用 clang 编译时,我得到一个关于error: use of non-static data member
. 我试图创建一个小测试用例来演示问题,但是对于小测试用例 g++ 给出了与 clang 相同的错误。
我已经向 pastebin 发布了一个 236 行文件来演示该问题: http: //pastebin.com/DGnfxmYe
当使用 g++ 4.6.3 编译时,它工作正常。但是当使用 clang 3.2 编译时,我收到以下错误消息:
myhashmap.hpp:169:29: error: use of non-static data member 'num_bins' of 'MyHashMap' from nested type 'iterator'
for (_index++; (_index < num_bins) && (bins[_index] == NULL); _index++)
^~~~~~~~
myhashmap.hpp:169:43: error: use of non-static data member 'bins' of 'MyHashMap' from nested type 'iterator'
for (_index++; (_index < num_bins) && (bins[_index] == NULL); _index++)
^~~~
myhashmap.hpp:171:17: error: use of non-static data member 'num_bins' of 'MyHashMap' from nested type 'iterator'
if (_index < num_bins) {
^~~~~~~~
myhashmap.hpp:172:17: error: use of non-static data member 'bins' of 'MyHashMap' from nested type 'iterator'
_theNode = bins[_index];
^~~~
查看代码,我明白为什么 clang 会给出这些错误消息。我不明白为什么 g++ 首先正确编译了代码。我没有编写这段代码,但我想让它用 clang 干净地编译。所以我试图准确地理解它在做什么。我很想了解为什么它用 g++ 编译而不是用 clang 编译。g++ 是否以不同的方式解释 c++ 标准,或者代码是否利用了一些 g++ 扩展?