c++ - 错误 LNK2019 : unresolved external symbol "public: __thiscall

标签 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:未解析的外部符号“public:__thiscall cpp::libraries::datastructures::LinkedListItem::LinkedListItem(int)”(??0?$LinkedListItem@H@datastructures@libraries@cpp@@QAE@H @Z) 在函数“public: void __thiscall CppLibrariesTests::LinkedListUnitTests::Add_to_An_Empty_Linked_List(void)”中引用 (?Add_to_An_Empty_Linked_List@LinkedListUnitTests@CppLibrariesTests@@QAEXXZ)

我正在使用 Visual Studio 2012。

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

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

经过很长一段时间后,我一直在努力学习 C++,因此如果我在做一些非常愚蠢的事情,我不会感到惊讶。任何人有什么想法吗?

最佳答案

理想情况下,模板必须内联实现。编译器的第二遍无法重新使用具有实现的 CPP 文件。或者,您还需要#include the CPP 文件。

Refer this article

关于c++ - 错误 LNK2019 : unresolved external symbol "public: __thiscall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356136/

相关文章:

C++/CLI 中的正则表达式用法

c++ - 如何处理坏指针

c++ - 在 c++ 中的不同行或列旁边搜索最小值和最大值的最快方法是什么

c++ - 如何使用指针 C++ 释放容器

c++ - 如何使用Crypto++并为RSA返回可打印的字节/字符数组?

javascript - 在没有 div 的情况下将 Javascript 字符串插入到 html 中的最简单方法?

c++如何在不知道确切参数的情况下定义函数

c++ - 逐行改进 C++ 的读取文件?

c++ - 如何为模板类重载 "new"运算符?

c++ - 调试断言失败