静态QMap的冲突声明

Blu*_*gma 0 c++ qt static qmap

我有一个带有3个静态QMap的简单Customer类

//customer.h

class Customer : public QObject
{
    Q_OBJECT
public:
    static QMap<Customer::Type, QString> const names;
    static QMap<QString, Customer::Type> const keywords;
    static QMap<Customer::Type, QString> const debugStrings;
};
Run Code Online (Sandbox Code Playgroud)

Customer :: Type是Enum,但这与问题无关

//customer.cpp

//QMap<QString, Customer::Type> const Customer::names = Customer::initNames();
QMap<QString, Customer::Type> const Customer::keywords = Customer::initKeywords();
QMap<Customer::Type, QString> const Customer::debugStrings = Customer::initDebugStrings();
Run Code Online (Sandbox Code Playgroud)

所有三个初始化函数都经过测试并且工作得很好,它们的定义方式完全相同,都是静态的

出于某种原因,我无法取消注释.cpp中的名称.如果我这样做,我会收到以下错误:

error: conflicting declaration 'const QMap<QString, Customer::Type> Customer::names'
Run Code Online (Sandbox Code Playgroud)

我试过重命名,把它移到其他地方,总是这个不起作用,我不知道为什么?

但其他的没有问题..

ago*_*old 7

在cpp文件中,模板参数的顺序错误:

QMap<QString, Customer::Type> const Customer::names = Customer::initNames();
Run Code Online (Sandbox Code Playgroud)

应该:

QMap<Customer::Type, QString> const Customer::names = Customer::initNames();
Run Code Online (Sandbox Code Playgroud)

或者,应根据返回类型更改头文件中的变量声明 Customer::initNames()