2010-05-09 41 views
2

,我發現了以下錯誤:`。'不能出現在常數表達式

`.' cannot appear in a constant-expression 

此功能(4號線):

bool Covers(const Region<C,V,D>& other) const { 
     const Region& me = *this; 
     for (unsigned d = 0; d < D; d++) { 
      if (me[d].min > other[d].min || me[d].max < other[d].max) { 
       return false; 
      } 
     } 

任何人都可以說明問題嗎?

編輯:

地區的定義是:

template <typename C, typename V, unsigned D> 
class Region : public boost::array<Detail::Range<C>,D> 

Rangeminmax變量。

回答

2

試用你的​​代碼告訴我,編譯器在me[d].max < other[d].max部分有問題。所以這個點的問題是虛假的。相反,編譯器在比較運算符上存在問題。只是恢復比較使得編譯器錯誤神奇消失:

if (me[i].min > other[i].min || other[i].max > me[i].max) { 
     return false; 
} 
2

我假設,因爲[]運營商是不是在你的變量meother有效的操作失敗等

  • 重載[]操作Region<>類?如果是這樣,它是否返回一個實際上有這些minmax成員的對象? —重載操作符是否返回對象,引用對象或指向對象的指針? (在後一種情況下,你需要通過->更換.

  • 如果沒有超載[],然後meother等將必須聲明爲數組爲您代碼纔有效。

+0

'[]'操作符被重載(從boost :: array'繼承)。 – 2010-05-09 11:48:06

0

這可能是因爲您沒有定義operator [](unsigned)const而失敗。我還建議你使用std::size_tint作爲你的循環變量;看到unsigned是非常罕見的。因爲您使用的是無符號類型,所以合乎邏輯的選擇是使用std::size_t。你也可以嘗試調用this-> operator [](d)而不是我[d],只是作爲一個理智檢查,儘管你應該工作得很好,假設你的類實現了適當的操作符重載。

3

如果stakx的答案是不夠的,你可能想看看「最小」和「最大」的變量。可能有一些預處理器的定義,阻止整個事情的工作。

嘗試增加

#undef min 
#undef max 

只是你的代碼之前,看看錯誤立場。

相關問題