【问题标题】:Variables in c++ builder XE2 not initializing when unit was called by component当组件调用单元时,c ++ builder XE2中的变量未初始化
【发布时间】:2013-04-19 01:23:37
【问题描述】:

我有一个带有声明的单元 (WebFunctions.h)

String RawURLAllowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~.-_";

这个单元在应用程序中运行良好。但是当我添加一个也声明WebFunctions.h的组件时,RawURLAllowedChars的初始化不会发生(RawURLAllowedChars = NULL)。

要让应用恢复工作,加上删除组件的类声明仍然需要删除WebFunctions.obj 文件。

注意:.cpp 文件中的任何声明,无论 .h 文件中是否有 extern 声明,都不起作用。

这是 XE2 中的错误还是我遗漏了什么?谢谢。

Obs.:#ifndef .. #endif 中的 Var 声明

【问题讨论】:

    标签: global-variables c++builder c++builder-xe2


    【解决方案1】:

    不要在头文件中初始化全局变量。在.h文件中声明变量为extern,然后在对应的.cpp文件中初始化,例如:

    WebFunctions.h:

    extern const String RawURLAllowedChars;
    

    WebFunctions.cpp:

    const String RawURLAllowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~.-_";
    

    【讨论】:

    • 最初有这种方式,这个也不行。我现在已经尝试了这两种方法,但没有成功。如果没有该组件,两种声明(在 .h 文件中和在 .cpp 文件中,在 .h 文件中带有 extern )都可以工作。还有一些变量是私有的,只在 .cpp 中声明,不像其他变量那样工作。
    【解决方案2】:

    这与其说是真正的解决方案,不如说是一种解决方法......但是......

    注释(在主应用程序的.cpp文件中)带有#pragma link "Component"的行,添加使用WebFunctions.h的组件(不是初始化单元)。

    删除 Debug\Win32 文件夹中的所有构建文件。

    重新编译应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2021-06-03
      • 2013-02-22
      相关资源
      最近更新 更多