我的链接器有问题。我正在尝试创建模板树,但由于我在使用模板时遇到了一些问题(我的第一次),我决定做一个“测试模板程序”。我一直在寻找anserws发布之前,并尝试在论坛上发布一些解决方案,但没有一个对我有用。这是测试程序:
.h文件
#pragma once
template <class T>
class Node {
public:
Node();
Node(T value);
~Node();
void manualTree();
private:
T data;
Node *left, *right, *parent;
};
.cpp文件
#include "stdafx.h"
#include <iostream>
#include "Node.h"
using namespace std;
template<class T>
Node<T>::Node(T val) {
data = val;
}
template<class T>
void Node<T>::manualTree() {
Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
cout << "left : " << root->left->data << endl;
cout << "right : " << root->right->data << endl;
cout << "root : " << root->data << endl;
}
template class Node<int>;
主体
#include "stdafx.h"
#include "arithmetics.h"
#include <iostream>
#include "Node.h"
using namespace std;
int main()
{
Node<int> n;
n.manualTree();
return 0;
}
以下是我尝试调用manualTree()函数后得到的结果: 严重性代码描述项目文件行列抑制状态
Error LNK1120 2 unresolved externals zad6 - szablony C:\Users\Piotr\source\repos\zad6 - szablony\Debug\zad6 - szablony.exe 1 1
Error LNK2019 unresolved external symbol "public: __thiscall Node<int>::~Node<int>(void)" (??1?$Node@H@@QAE@XZ) referenced in function _main zad6 - szablony C:\Users\Piotr\source\repos\zad6 - szablony\zad6 - szablony\main.obj 1 1
Error LNK2019 unresolved external symbol "public: __thiscall Node<int>::Node<int>(void)" (??0?$Node@H@@QAE@XZ) referenced in function _main zad6 - szablony C:\Users\Piotr\source\repos\zad6 - szablony\zad6 - szablony\main.obj 1 1
编辑:
我已将所有内容移动到.h文件中,就像他们在链接帖子中所说的那样,我仍然会收到相同的警告,有时还会收到更多警告。已经尝试将这些行放入.cpp文件中但仍然无效(使用相同的警告):
template class Node<int>;
或
Node<int> n;
新的.h文件
#pragma once
template <class T>
class Node {
public:
Node();
Node(T value) {
data = value;
}
~Node();
void manualTree() {
Node* root = new Node(1);
root->left = new Node(2);
root->right = new Node(3);
cout << "left : " << root->left->data << endl;
cout << "right : " << root->right->data << endl;
cout << "root : " << root->data << endl;
}
private:
T data;
Node *left, *right, *parent;
};