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++ 引擎中,classstruct默认构造函数/析构函数 存在一些问题。

请参阅bds 2006 C hidden memory manager conflicts 了解更多信息。

添加自定义(甚至是空的)构造函数/析构函数可以解决许多问题,甚至是您的问题。试试:

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 中简单数组的初始化程序错误太多的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio C++11g 编译错误 - 初始化程序太多

用作初始化程序的错误数组,我不知道错误

Java 小程序在从迭代器数组中删除对象时抛出错误

将二维字符串数组传递给函数时出错 (C++)

安卓错误日志分析

在 VS2013 中使用指定的初始化程序来初始化结构中的 2D 字符数组初始化程序会发出错误 C2078