C++ 如何在C+中创建结构的编译时常量实例+;11
在我当前的项目中,我试图用c++11创建一个结构的编译时常量静态实例。我的代码在clang(Apple LLVM版本6.1.0)中编译并运行良好,但在g++(GCC)4.8.3中不起作用。 GCC抛出参数未声明为“constexpr”的错误。 在gcc中有什么方法可以实现这一点吗C++ 如何在C+中创建结构的编译时常量实例+;11,c++,c++11,gcc,clang,C++,C++11,Gcc,Clang,在我当前的项目中,我试图用c++11创建一个结构的编译时常量静态实例。我的代码在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; const
//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;
}
}
我认为问题在于您在Parameter.h中将
PARAM_A
和PARAM_Z
声明为const
,然后在Parameter.cpp中将它们定义为constepr
。
const
和constepr
是不同的东西。在Parameter.cpp中,必须具有以下内容:
//Parameter.cpp
const Par Parameters::PARAM_A={0,"-a","Bla a"};
...
const Par Parameters::PARAM_Z={0,"-z","Bla z"};
请复制准确的错误消息。另外,请先修复语法错误。@user207933我添加了错误并删除了一些打字错误。现在理解这个问题足够好吗?FWIW,GCC4.9接受这一点。
//Parameter.cpp
const Par Parameters::PARAM_A={0,"-a","Bla a"};
...
const Par Parameters::PARAM_Z={0,"-z","Bla z"};