2012-06-03 61 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