【发布时间】:2016-01-22 02:54:47
【问题描述】:
我正在使用一些库代码。 它可以在 Visual Studio (2008) 下编译和工作,但不能在 GCC (v4.8.4.) 下编译和工作。
在标题中我们有:
extern const char menu_styles[MENU_COUNT][MAX_LEN];
typedef SysEnum <s_type_t, c_long, no_style, un_style, MAX_LEN, (char *)&menu_styles> MenuStyleEnum;
SysEnum 在哪里(在另一个文件中定义):
template<class ETYPE, class BTYPE, int MINV, int MAXV, int MLEN, char* pStr> class SysEnum
而 gcc 出现错误:
error: ‘menu_styles’ cannot appear in a constant-expression
我完全同意。 (此外,将const char * 转换为char *)。
我希望 VS2008 只是用 const char * 而不是 menu_styles 编译这个 typedef,但我真的不确定。
我担心 VisualSudio 正在添加某种类似构造函数的代码,因此无论何时使用此 typedef,此 char * 确实指向 menu_styles。
使用 GCC 编译时,我可以用什么替换它?
【问题讨论】:
-
extern const char * menu_styles[MENU_COUNT];工作吗? -
解释 SysEnum 模板的用途。它的第 6 个模板参数期望完成什么。
-
@Sam Varshavchik ~ 我不知道这个模板的用途。它似乎包含一堆关于菜单样式的元信息。模板
class SysEnum [...] -
那样的话,恐怕你不明白它是怎么用的,你也无能为力。这种模板使用违反了 C++ 标准。违反 C++ 标准没有解决方法,因为 gcc 旨在成为符合标准的编译器。如果您了解模板在做什么,也许您可以找到一种不同的方式来做它正在做的事情,但不知道它应该做什么,很遗憾没有答案。
-
@JJ Hakala - 不。GCC 说“extern”使它成为“无效类型声明”。没有它,我会得到同样的错误。