我正在尝试使用c ++创建模板

时间:2018-01-07 20:11:11

标签: c++ visual-studio templates linker

我的链接器有问题。我正在尝试创建模板树,但由于我在使用模板时遇到了一些问题(我的第一次),我决定做一个“测试模板程序”。我一直在寻找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;
};

0 个答案:

没有答案