我有一个像
这样的课程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 ++,所以如果我做一些非常愚蠢的事情,我会感到很惊讶。有什么想法吗?
答案 0 :(得分:1)
理想情况下,模板必须实现内联。编译器的第二次传递不能重新使用具有该实现的CPP文件。或者,您还需要 #include CPP 文件。