This question already has answers here:
Why can templates only be implemented in the header file?
(17个答案)
3年前关闭。
我有一个包含针对我的项目的常用功能的类。功能之一是模板静态:
common.h
等等实现:
common.cpp
编译没有问题,但是当我想使用如下功能时:
我收到一些奇怪的链接器错误:
MyEnum已在Qt元系统中注册:
我做错了什么以及如何使其起作用?
(17个答案)
3年前关闭。
我有一个包含针对我的项目的常用功能的类。功能之一是模板静态:
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);
我收到一些奇怪的链接器错误:
MyEnum已在Qt元系统中注册:
enum class MyEnum
{
Value1,
Value2,
Value3
};
Q_ENUM(MyEnum);
我做错了什么以及如何使其起作用?
最佳答案
非专业的模板需要在头文件中实现。
如果将Common::EnumToString
的实现放在common.h
内,它将起作用。
关于c++ - 未定义对静态模板函数的引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47535402/
10-14 04:51