我有一个类
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 文件。
关于c++ - 错误 LNK2019 : unresolved external symbol "public: __thiscall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356136/