2017-11-28 2 views
0

클래스에 내 프로젝트의 공통 함수가 포함되어 있습니다. 기능 중 하나는 정적 템플릿입니다 :정적 템플릿 함수에 대한 정의되지 않은 참조

common.h

#include <QMetaEnum> 
#include <QString> 

class Common 
{ 
public: 
    Common(); 
    template<typename T> static QString EnumToString(const T value); 
}; 

등 구현 : 문제없이 컴파일

common.cpp

template<typename T> 
QString Common::EnumToString (const T value) 
{ 
    return QString(QMetaEnum::fromType<T>().valueToKey(value)); 
} 

하지만 때 내가 이 기능을 다음과 같이 사용하고 싶습니다 :

MyEnum enum = MyEnum::Value1; 
qDebug() << Common::EnumToString<MyEnum>(enum); 

내가 이상한 링커 오류 얻을 :

error: undefined reference to `QString Common::EnumToString(MyEnum)'

MyEnum Qt는 metasystem을 등록했습니다

enum class MyEnum 
{ 
    Value1, 
    Value2, 
    Value3 
}; 
Q_ENUM(MyEnum); 

은 내가 잘못 할 어떻게 작동하려면를?

답변

1

헤더 파일에 특수 템플릿을 구현해야합니다. Common::EnumToString의 구현을 common.h 안에 넣으면 작동합니다.

관련 문제