À l'aide d'une énumération comme un paramètre du modèle

Je voudrais utiliser un modèle de classe afin de fournir certaines fonctionnalités communes à certains enfants des classes qui sont très similaires. La seule variation est l'énumération que chacun utilise.

C'est la classe parent

template<typename T> class E_EnumerationBase : public SimpleElement
{
public:
    E_EnumerationBase();
    virtual bool setValue(QString choice);
    virtual T getState();

protected:
    T state;
    QHash<QString, T> dictionary;
};

template<typename T> E_EnumerationBase<T>::E_EnumerationBase() {
    state = 0;
}

template<typename T> bool E_EnumerationBase<T>::setValue(QString choice) {
    T temp;
    temp = dictionary.value(choice, 0);
    if (temp == 0) {
        return false;
    }

    value = choice;
    state = temp;
    return true;
}

template<typename T> T E_EnumerationBase<T>::getState() {
    return state;
}

C'est l'un des enfants

enum TableEventEnum {
    NO_VALUE = 0,
    ATTRACT = 1,
    OPEN = 2,
    CLOSED = 3
};

class E_TableEvent : public E_EnumerationBase<enum TableEventEnum>
{
public:
    E_TableEvent();
};

C'est le constructeur

E_TableEvent::E_TableEvent()
{
    state = NO_VALUE;
    dictionary.insert("attract", ATTRACT);
    dictionary.insert("open", OPEN);
    dictionary.insert("closed", CLOSED);
}

L'éditeur de liens est de lancer cette erreur:

e_tableevent.cpp:6: error: undefined reference to `E_EnumerationBase<TableEventEnum>::E_EnumerationBase()'

Une énumération être utilisée en tant que paramètre d'un modèle comme celui-ci?

"Le compilateur est en train de lancer cette erreur:" Non, le linker est en train de jeter l'erreur.
Est votre constructeur de définition dans le fichier d'en-tête?
Non, la définition est dans un autre fichier source. L'erreur s'affiche sur le lien.

OriginalL'auteur IslandCow | 2012-02-02