放置在 TForm 上的控件何时初始化?

问题描述 投票:0回答:1

如果在窗体构造函数的初始化列表中使用了VCL控件,编译器会报告警告:

此处使用字段“ControlName”时未初始化

情况确实如此还是编译器在这里犯了错误?

当我将表单的控件传递给在初始化列表中初始化的对象时,乍一看似乎可以工作。

示例(C++ Builder 12 Athens)

  1. 创建新的 Windows VCL 应用程序

  2. 在主窗体上放置

    TEdit

  3. 将该类添加到

    TForm1
    的声明之上:

    struct EditValidator { EditValidator(TEdit* edit) {} };

  4. TForm1
    中声明该成员变量:

    EditValidator m_editValidator;

  5. TForm1
    的初始化列表中初始化
    m_editValidator

    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), m_editValidator(Edit1) {}

编译器警告:

[C++ 警告] Unit1.cpp(11, 33):此处使用时字段“Edit1”未初始化

c++builder vcl
1个回答
0
投票

如果您的代码/程序运行正常,您可以忽略此 clang 警告,或通过参数 -Wno-uninitialized 阻止它。

对我来说,我会允许编译器发出这些警告,这更有帮助

32位编译器不应该警告这个,只有64位编译器 - 我说得对吗?

干杯

© www.soinside.com 2019 - 2024. All rights reserved.