C++ 如何在C+中创建结构的编译时常量实例+;11

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

在我当前的项目中,我试图用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;
    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"};