템플릿 클래스를 사용하여 매우 유사한 일부 하위 클래스에 몇 가지 공통 기능을 제공하고 싶습니다. 유일한 변형은 각각 사용하는 열거 형입니다.열거 형을 템플릿 매개 변수로 사용하기
:이
은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;
}
이 아이들 중 하나가
enum TableEventEnum {
NO_VALUE = 0,
ATTRACT = 1,
OPEN = 2,
CLOSED = 3
};
class E_TableEvent : public E_EnumerationBase<enum TableEventEnum>
{
public:
E_TableEvent();
};
이 링커는이 오류를 던지고있다
E_TableEvent::E_TableEvent()
{
state = NO_VALUE;
dictionary.insert("attract", ATTRACT);
dictionary.insert("open", OPEN);
dictionary.insert("closed", CLOSED);
}
생성자에게있는 부모 클래스입니다
e_tableevent.cpp:6: error: undefined reference to `E_EnumerationBase<TableEventEnum>::E_EnumerationBase()'
열거 형을이 같은 템플릿에 대한 매개 변수로 사용할 수 있습니까?
"컴파일러에서이 오류가 발생합니다. *"아니요, _linker_에서 해당 오류가 발생했습니다. – ildjarn
생성자 정의가 헤더 파일에 있습니까? – Lol4t0
아니요, 정의는 별도의 소스 파일에 있습니다. 링크에 오류가 표시됩니다. – IslandCow