c++ - bcc32 中简单数组的初始值设定项错误太多

标签 c++ compiler-errors borland-c++

编译下面的例子

struct S {};

int main() {
  S array[1] = { S() };
}

bcc32我收到以下错误:

[bcc32 Error] test.cpp(4): E2225 Too many initializers

它是 bcc32 中的错误还是我遗漏了什么并且上面的示例不是有效的 C++?

Clang 和 GCC 都可以毫无问题地编译这个例子。

最佳答案

Borland BDS2006(可能还有更新的版本)

在其 C++ 引擎中,classstruct默认构造函数/析构函数存在一些问题。

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

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 因为它从一开始就是垃圾并在几天后将其关闭(我认为最差的 BCBBCB5 中甚至击败了 BCB3,4)一切都很好(在 BDS2006 之前这是我最喜欢的 IDE ) 因此他们必须更改 C++ 引擎(不要与运行时库混淆!!!)。

甚至添加空的构造函数析构函数也有帮助。如果你有动态分配,你需要处理粗略的分配。如果您有嵌套的类/结构,请不要忘记将它们也添加到它们中。

关于c++ - bcc32 中简单数组的初始值设定项错误太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33829983/

相关文章:

c - 在 Borland C++ 编译器中链接 DLL

c++ - 32 位代码中 DWORD 与 QWORD 对齐的性能

c++ - C++ 新手。关于常量指针的问题

c++ - 'void' 编译器 : TDM-GCC 4. 6.1 64 位之前的预期主表达式

C++ 字符串不会正确输出值

java - Compiler throw non static method cannot accessed from static context 当没有问题

c - 在 C 中传递枚举

import - 有没有兼容VCL和C++的IDE?

c++ - 打开一个Shell程序,传递参数,返回结果

c++ - 无法弄清楚错误