【问题标题】:error LNK2019: unresolved external symbol "public: __thiscall错误 LNK2019:未解析的外部符号“公共:__thiscall
【发布时间】:2016-07-21 05:58:21
【问题描述】:

我有这样的课

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:未解析的外部符号“公共:__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++,所以如果我做了一些非常愚蠢的事情,我不会感到惊讶。有什么想法吗?

【问题讨论】:

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


【解决方案1】:

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

Refer this article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2018-11-13
    • 2023-03-28
    • 2015-05-28
    • 2012-10-31
    相关资源
    最近更新 更多