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 文件中。
我有一个 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 文件中。