【问题标题】:Undefined reference to static template function [duplicate]对静态模板函数的未定义引用[重复]
【发布时间】:2017-11-28 15:38:59
【问题描述】:

我有一个类包含我的项目的常用功能。功能之一是模板静态:

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

我收到一些奇怪的链接器错误:

错误:未定义对 `QString 的引用 Common::EnumToString(MyEnum)'

MyEnum 已在 Qt 元系统中注册:

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

我做错了什么以及如何让它发挥作用?

【问题讨论】:

    标签: c++ qt enums static-methods


    【解决方案1】:

    非特化模板需要在头文件中实现。 如果你把Common::EnumToString 的实现放在common.h 里面,它就会起作用。

    【讨论】:

      猜你喜欢
      • 2012-05-24
      • 1970-01-01
      • 2014-04-30
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多