C++ bcc32中简单数组的初始值设定项过多错误
编译以下示例C++ bcc32中简单数组的初始值设定项过多错误,c++,compiler-errors,borland-c++,C++,Compiler Errors,Borland C++,编译以下示例 struct S {}; int main() { S array[1] = { S() }; } 使用时,我得到以下错误: [bcc32 Error] test.cpp(4): E2225 Too many initializers 是Bcc32中的一个bug还是我漏掉了什么,上面的例子是无效的C++?< /p> Clang和GCC编译这个示例时没有问题。BorlandBDS2006(可能还有更新的版本) >在C++引擎中,< >类< /代码>和 Stutt中存在“
struct S {};
int main() {
S array[1] = { S() };
}
使用时,我得到以下错误:
[bcc32 Error] test.cpp(4): E2225 Too many initializers
是Bcc32中的一个bug还是我漏掉了什么,上面的例子是无效的C++?< /p>
Clang和GCC编译这个示例时没有问题。BorlandBDS2006(可能还有更新的版本) <> >在C++引擎中,< <代码> >类< /代码>和
- 有关更多信息,请参阅
struct S
{
S(){};
S(S& a){};
~S(){};
S* operator = (const S *a){};
//S* operator = (const S &a){}; // use this only if you have dynamic allocation members
};
int main()
{
S array[1] = { S() };
}
我在BDS2006中尝试过这个方法,它看起来很有效(如果没有struct
,很难说),但是您至少可以编译并运行
我首先在BDS2006中检测到这种行为。。。没有真正尝试<强> BCB6<强>,因为它是一个垃圾,几天后就被删除了(我认为在<强> BCB5<强> >之前,最坏的<强> BCB 甚至超过,bc3.4/s>都是好的(在<强> BDS2006 < /Stult>是我最喜欢的IDE),因此必须改变C++引擎。(不要与运行库混淆!!!)
添加空构造函数析构函数也有帮助。如果您有动态分配,则需要处理粗略分配。如果您有嵌套类/结构,请不要忘记也将它们添加到它们。对我来说,聚合初始化似乎非常有效。我不确定这是否是问题所在,但我认为使用
s()
在c++03之前,技术上是不正确的。bcc32支持c++03吗?他们声称支持c++11的一些功能,如右值引用,但我找不到有关c++98/03支持完整性的信息。c++03需要的功能是值初始化。我会非常惊讶如果编译器不支持它,如果它也支持C++11,则会上升。此外,我不确定这如何适用于空对象,因为技术性与复制对象有关,但没有可复制的内容。@vitaut请参阅我的答案如何解决此问题。。。