【发布时间】:2015-04-22 14:52:49
【问题描述】:
在我当前的项目中,我正在尝试使用 c++11 创建结构的编译时 const 静态实例。我的代码在 clang(Apple LLVM 版本 6.1.0)中编译并运行良好,但它不适用于 g++(GCC)4.8.3。 GCC 抛出参数未声明为“constexpr”的错误。 有什么办法可以在 gcc 中完成这项工作吗?
//Parameter.h
struct Par {
const int uniqid;
const char *name;
const char *description;
constexpr Par(int uid,const char * n,const char * d)
:uniqid(uid), name(n),description(d){}
};
class Parameters
{
const static Par PARAM_A;
...
const static Par PARAM_Z;
printParameters(std::vector<Par> parameters);
};
//Parameter.cpp
constexpr Par Parameters::PARAM_A={0,"-a","Bla a"};
...
constexpr Par Parameters::PARAM_Z={0,"-z","Bla z"};
void Parameters::printParameters(std::vector<Par> parameters){
for (size_t i = 0; i < parameters.size(); i++) {
switch (parameters[i].uniqid) {
case PARAM_A.uniqid:
std::cout << "A" << std::endl;
break;
}
}
GCC 如下:
Parameters.cpp:11:39: error: declaration of ‘const Par Parameters::PARAM_A’ outside of class is not definition [-fpermissive]
Parameters.cpp:12:39: error: redeclaration ‘Parameters::PARAM_A’ differs in ‘constexpr’
constexpr Par Parameters::PARAM_A={...};
In file included from Parameters.cpp:2:0:
Parameters.h:190:34: note: ‘Parameters::PARAM_A’ was not declared 'constexpr' const static Par PARAM_A;
【问题讨论】:
-
请复制exact错误信息。此外,请先修复您的语法错误。
-
@user2079303 我添加了错误并删除了一些拼写错误。现在是否足以理解问题?
-
FWIW,GCC 4.9 接受这个。