2016-11-17 6 views
0

Я пытаюсь создать шаблон узла для использования с моим связанным шаблоном списка, но получаю сообщение об ошибке, что мои конструкторы в Node.h не определены. У меня есть файл Node.h и файл Node.tem, который я создал в Visual Studio. Node.h файл выглядит следующим образом:C++ LinkList и шаблон узла Связывание ошибок

#ifndef NODE_H 
#define NODE_H 

#include <cstdlib> 

template <class Type> 
class Node 
{ 
public: 
    Node(); 
    Node(Type indata); 

    Type data; 
    Node<Type>* next; 
    Node<Type>* prev; 

}; 
#include "Node.tem" 
#endif 

и мой Node.tem файл выглядит следующим образом:

template <class Type> 
Node<Type>::Node() 
{ 
    next = nullptr; 
} 

template <class Type> 
Node<Type>::Node(Type indata) 
{ 
    data = indata; 
    next = nullptr; 
} 

После некоторой отладки, это выглядит как проблема возникает в моей функции Alloc в Linked шаблон списка на этот бит кода:

template <class Type> 
Node<Type>* LinkList<Type>::alloc(Type indata) 
{ 
    Node<Type>* dynamicNode = new Node(indata); //error occurs here 
    return dynamicNode; 
} 

ошибки я получаю:

'Node': class has no constructors и 'Node': use of class template requires template argument list

+0

Вы фактически получаете ошибку компилятора, или это просто исходя из Intellisense? –

+0

@NathanMonteleone Да, я получаю ошибку компилятора. Ошибка компилятора: 'ошибка C2514: 'Node': класс не имеет конструкторов' – kdubs

+0

@ pm100 Не уверен, что он уникален для VS. Если я не включу его в файл заголовка, тогда теоретически .h не сможет «увидеть» .tem-файл. Хотя, похоже, это все равно не видно. – kdubs

ответ

2

Я думаю, что вы забыли <Type> в new Node:

Node<Type>* dynamicNode = new Node<Type>(indata); 

также, это лучше всего использовать auto:

auto dynamicNode = new Node<Type>(indata); 
+0

Омг, это так глупо! Спасибо, что указали, что это проблема. :) – kdubs