错误LNK2019:未解析的外部符号" public:__ thishisall

时间:2016-04-01 12:16:49

标签: c++ templates visual-c++

我有一个像

这样的课程
template <class T>
        class LinkedListItem
        {
        public:
            LinkedListItem(T value);
            LinkedListItem(const LinkedListItem<T>& rhs);
            T getValue(void);
            LinkedListItem<T>& getNext(void);
            void setNext(LinkedListItem<T>& next);
            LinkedListItem<T>& operator=(const LinkedListItem<T>& rhs);
            ~LinkedListItem();
        private:
            T _value;
            LinkedListItem& _next;
        };

我正在尝试编写像

这样的单元测试
TEST_CLASS(LinkedListUnitTests)
{
public:

    TEST_METHOD(Add_to_An_Empty_Linked_List)
    {
        LinkedListItem<int> item(1);
    }
//private:

};

当我尝试构建上面的代码时,我得到了丑陋的错误 -

错误LNK2019:未解析的外部符号&#34; public:__ thiscall cpp :: libraries :: datastructures :: LinkedListItem :: LinkedListItem(int)&#34;函数&#34; public:void __thiscall CppLibrariesTests :: LinkedListUnitTests :: Add_to_An_Empty_Linked_List(void)&#34;(?0?$ LinkedListItem @H @ datastructures @ libraries @ cpp @@ QAE @ H @ Z) (?Add_to_An_Empty_Linked_List @ LinkedListUnitTests @ @@ CppLibrariesTests QAEXXZ)

我正在使用Visual Studio 2012。

有趣的是,如果我在单元测试类中添加模板,如下所示,编译错误就会消失,但测试没有被发现,我无法运行它们。

template<class T>
TEST_CLASS(LinkedListUnitTests){..}

我想在很长一段时间后拿起C ++,所以如果我做一些非常愚蠢的事情,我会感到很惊讶。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

理想情况下,模板必须实现内联。编译器的第二次传递不能重新使用具有该实现的CPP文件。或者,您还需要 #include CPP 文件。

Refer this article