конфликтующее объявление статического QMap

У меня есть простой класс Customer с 3 статическими QMap

//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;
};

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();

все три функции инициализации были протестированы и отлично работают, они определены точно так же и все статические

По какой-то причине я не могу раскомментировать имена в .cpp. Если я это сделаю, я получаю следующую ошибку:

error: conflicting declaration 'const QMap<QString, Customer::Type> Customer::names'

Я пробовал переименовывать, перемещать в другое место, всегда не работает этот, и я не знаю, почему?

Но остальные работали без проблем..


person BlueMagma    schedule 26.10.2015    source источник
comment
У вас есть метод класса с таким же именем? В любом случае, вы должны предоставить полное объявление класса.   -  person hank    schedule 26.10.2015


Ответы (1)


В вашем файле cpp параметры шаблона указаны в неправильном порядке:

QMap<QString, Customer::Type> const Customer::names = Customer::initNames();

должно быть:

QMap<Customer::Type, QString> const Customer::names = Customer::initNames();

Или объявление переменной в вашем заголовочном файле должно быть изменено в зависимости от возвращаемого типа Customer::initNames()

person agold    schedule 26.10.2015
comment
Я чувствую себя действительно глупым сейчас :-) большое спасибо, я потерял голову из-за этого почти час - person BlueMagma; 26.10.2015
comment
Такую ошибку легко пропустить :) - person agold; 26.10.2015
comment
классическая ошибка копирования :) - person Marek R; 26.10.2015