C ++:基类中的模板方法

时间:2014-01-13 12:16:40

标签: c++ templates inheritance

我有我的基类:

class UnitTestThread : public testing::Test
{
    public:
        /// purgeQueue()
        template <typename T> void purgeQueue(const ___handle queue, T &data) const;
};

我的继承类:

class HmiTest : public UnitTestThread
{
    public:         
        // Sets up the test fixture.
        virtual void SetUp();
        // ...
}

void HmiTest::SetUp()
{
    // By default , purge all the queues
    CONTROL_ACTION_PARAM controlAction;
    purgeQueue(ApplicationContext.queueControlActionsToThermostat, controlAction);
}

我有一个链接错误:

HmiTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall UnitTestThread::purgeQueue<struct CONTROL_ACTION_PARAM>(void * const,struct CONTROL_ACTION_PARAM &)const " (??$purgeQueue@UCONTROL_ACTION_PARAM@@@UnitTestThread@@QBEXQAXAAUCONTROL_ACTION_PARAM@@@Z) referenced in function "public: virtual void __thiscall HmiTest::SetUp(void)" (?SetUp@HmiTest@@UAEXXZ)

我不明白为什么......: - S

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:3)

您已声明了该方法,但尚未实现该方法。或者,如果你有,它在一个cpp文件中,这是不好的(需要在模板方法的标题中,或使用显式模板实例化)。

您需要在类定义之后实现该方法:

class UnitTestThread : public testing::Test
{
    public:
        /// purgeQueue()
        template <typename T>
        void purgeQueue(const ___handle queue, T &data) const;
};

template <typename T>
void UnitTestThread::purgeQueue(const ___handle queue, T &data) const
{
    // Do something
}

答案 1 :(得分:2)

模板实现应包含在标题(.h)文件中