2013-01-14 128 views
2

摘要: 我有一個code snippet編譯良好的g ++,但不與鏗鏘。非靜態數據成員錯誤與鏗鏘而不是g ++

詳細

我已經編譯罰款與克+ +項目,但鏗鏘編譯時我得到error: use of non-static data member錯誤。我試圖創建一個能夠證明問題的小測試用例,但對於小測試用例,g ++與clang給出了相同的錯誤。

我已經發布了236線文件引擎收錄演示該問題: http://pastebin.com/DGnfxmYe

當G ++ 4.6.3編譯能正常工作。但是,當鏗鏘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]; 
         ^~~~ 

的代碼來看,是有意義的我,爲什麼鐺是給這些錯誤消息。我不明白的是爲什麼g ++首先正確編譯了代碼。我沒有寫這段代碼,但我想用clang來乾淨地編譯它。所以我正在努力理解它到底在做什麼。而且我會對理解爲什麼用g ++編譯而不是用clang編譯感興趣。 g ++是否以不同的方式解釋C++標準,或者是否有一些代碼正在利用的g ++擴展?

回答

1

它與GCC 4.8(預發佈)失敗,所以我認爲這是一個已修復的錯誤。雖然我找不到相應的錯誤報告。

要解決,我認爲你需要一個int _num_bins成員添加到迭代器,並通過代碼cotnainer的num_binsbegin()end()迭代器的構造函數,所以它存儲在每個迭代器對象。


(此外,不寫(void)採取任何參數的函數,這是可憎的。在C++中不帶參數的函數被寫入()

相關問題