extern const std::string 未在 iOS 下初始化,在 Windows 上工作正常

extern const std::string not initialized under iOS, works fine on Windows

我有一个 Configurations.h 和 Configurations.cpp,它们定义了一些在我的跨平台应用程序中随处使用的常量字符串值。 在另一个文件中,我使用其中一些值来创建其他常量字符串。 可能看起来像这样:

const std::string SHADER_SOURCE_HEAD_ES = Configurations::DEFAULT_SHADER_VERSION_ES + SHADER_SOURCE_LINE_BREAK + "precision mediump float" + SHADER_SOURCE_LINE_ENDING;

这在 Windows 上工作正常并且在 iOS 上工作,在我将 Configurations.h 中的所有内容更改为 "extern const" 并在 cpp- 中进行声明之前文件。

现在 iOS Configurations::DEFAULT_SHADER_VERSION_ES 是空的。 Configuration.h 当然首先包括在内,因此常量应该存在(并且在 Windows 上执行)。我还有一些使用常量的函数(在与 const std::string SHADER_SOURCE_HEAD_ES 相同的文件中)并且它们在那里工作。

这里可能有什么问题?非常感谢你们:-)

听起来像是初始化顺序问题。一种更简洁的方法是使用函数来提供对这些字符串的访问。在这些函数中,创建变量 static 并适当地初始化它们。

例如,而不是使用:

extern const int myVar;

在 .h 文件中和

const int myVar = 20;

在 .cpp 文件中,使用:

extern int getMyVar();

在 .h 文件中和

int getMyVar()
{
   static const int myVar= 20;
   return myVar;
}

在 .cpp 文件中。