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++引擎中,< <代码> >类< /代码>和 Stutt中存在“强>默认构造函数/析构函数< /强>”的问题。
  • 有关更多信息,请参阅
添加自定义(即使是空的)构造函数/析构函数解决了许多问题甚至你的问题。尝试:

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请参阅我的答案如何解决此问题。。。