bcc32 中简单数组的初始化程序错误太多
Posted
技术标签:
【中文标题】bcc32 中简单数组的初始化程序错误太多【英文标题】:Too many initializers error for a simple array in bcc32 【发布时间】:2016-02-23 03:15:21 【问题描述】:编译下面的例子
struct S ;
int main()
S array[1] = S() ;
bcc32 出现以下错误:
[bcc32 Error] test.cpp(4): E2225 Too many initializers
这是 bcc32 中的一个错误,还是我遗漏了什么,上面的示例不是有效的 C++?
Clang 和 GCC 编译这个例子都没有问题。
【问题讨论】:
对我来说似乎完全有效的聚合初始化。我不确定这是否是这里的问题,但我认为在 c++03 之前在那里使用S()
在技术上是不正确的。 bcc32是否支持c++03?
他们声称支持某些 C++11 功能,例如右值引用,但我找不到有关 C++98/03 支持完整性的信息。
从 c++03 中获得技术上正确的特性是 value-initialization。如果编译器不支持它,如果它也支持 C++11,我会感到非常惊讶。此外,我不确定这如何应用于空对象,因为技术性与复制对象有关,但没有什么可复制的。
@vitaut 看看我的回答如何解决这个问题...
【参考方案1】:
Borland BDS2006(可能还有更新的版本)
在其 C++ 引擎中,class
和 struct
的 默认构造函数/析构函数 存在一些问题。
添加自定义(甚至是空的)构造函数/析构函数可以解决许多问题,甚至是您的问题。试试:
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 甚至击败 BCB3,4) 都很好(在 BDS2006 之前这是我最喜欢的 IDE )因此他们必须更改 C++ 引擎(不要与运行时库混淆!!!)。
添加空的构造函数和析构函数也会有所帮助。如果您有动态分配,则需要处理粗略的分配。如果您有嵌套的类/结构,请不要忘记将这些也添加到它们中。
【讨论】:
以上是关于bcc32 中简单数组的初始化程序错误太多的主要内容,如果未能解决你的问题,请参考以下文章