错误 LNK2019:未解析的外部符号"公共:__thiscall

error LNK2019: unresolved external symbol "public: __thiscall

本文关键字:符号 公共 外部 thiscall LNK2019 错误      更新时间:2023-10-16

我有一个类似的类

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文件。或者,您还需要#包括CPP文件。

请参阅本文