2012-06-03 79 views
0

我碰到這個代碼片段來試圖編譯達特前沿基礎代碼:飛鏢編譯錯誤 - 的代碼片段怪異在

const uint8_t chars[kCharsLen] = { 1, 2, 127, 128, 192, 0, 255, -1 }; 
const String& str8 = String::Handle(String::New(chars, kCharsLen)); 
EXPECT_EQ(kCharsLen, str8.Length()); 
EXPECT_EQ(1, str8.CharAt(0)); 
EXPECT_EQ(127, str8.CharAt(2)); 
EXPECT_EQ(128, str8.CharAt(3)); 
EXPECT_EQ(0, str8.CharAt(5)); 
EXPECT_EQ(255, str8.CharAt(6)); 
EXPECT_EQ(255, str8.CharAt(7)); 

這似乎很奇怪,我認爲-1會嘗試分配到uint8_t。但我不願意刪除它,因爲它可能是一個測試,以確保您的編譯器支持這一點。其實我來到翻過它的原因是因爲我的Fedora 17的虛擬機上的編譯器(gcc 4.7)

編譯錯誤:

narrowing conversion of -1 from int to const uint8_t {aka const unsigned char } inside { } is ill-formed in C++11 [ -Werror=narrowing ]

+1

符號的數字「包裝過度」時,他們的範圍之外,因此'-1'是說255不知道爲什麼,只是另一種方式你會得到一個編譯器錯誤。 – Pubby

+0

不確定爲什麼255使用一次,但是-1也使用一次。 – chris

+3

請發佈編譯器錯誤。 –

回答

1

這不是一個編譯器錯誤,這是一個編譯器警告。您可能正在使用-Werror,它會將所有警告轉化爲錯誤。

您也可能會注意到EXPECT_EQ(255, str8.CharAt(7));正在測試-1爲255

+0

是的,Dart版本使用'-Werror'。 – Ladicek

+0

好的,我承認我的問題有點含糊(實際上非​​常模糊)。在這一點上,我足夠清楚地瞭解錯誤的性質,並通過消除奇怪的測試來解決錯誤。然而,如果Dart構建使用-Werror,那麼它會讓我感到非常奇怪,因爲代碼庫中會有這樣的測試。爲什麼我是第一個遇到這個問題的人?是否因爲我是第一個嘗試使用gcc 4.7的人,我懷疑它。這個問題是針對Dart開發者的,我第一次碰到了dart-dev IRC,由於我沒有得到任何迴應,並且有人寫道論壇不是官方支持渠道,但是Stack ...是 – jedesah

+0

我可以確認Dart開發者使用稍舊的GCC版本,所以不要猶豫提出有關這些警告的錯誤。前一段時間,我也是這樣 - 由於我很懶,所以我只是在'tools/gyp/configurations_make.gypi'中註釋了'-Werror'行。 – Ladicek