2016-09-04 18 views
-1

私はポインタとテンプレートを勉強し、テンプレートでダブルリンクリストを作成しようとしています。コンパイラはC2955を15行でスローします。コンパイラエラーC2955

#include "stdafx.h" 
#include <iostream> 

using namespace std; 

template<typename T> 
struct s_node 
{ 
    T value; 
    s_node *p_next; 
    s_node *p_prev; 
}; 

template<typename T> 
s_node* createNode(s_node *p_parent = NULL) { 

    s_node *p_newNode = new s_node; 

    p_newNode->value = 0; 
    p_newNode->p_next = NULL; 

    if (p_parent != NULL) { 
     p_parent->p_next = p_newNode; 
    } 

    return p_newNode; 
} 
+0

C2955は、それを見ずに、私たちには何も意味しません。質問に完全なエラーを貼り付けてください。 – chris

+3

どのような行15があるのだろうか。推測を使わないでください。 – IInspectable

答えて

1

エラーが一目瞭然です:

error C2955: 's_node': use of class template requires template argument list 

s_nodeはクラステンプレートです。

変更するには、このようなコード:

template<typename T> 
s_node<T>* createNode(s_node<T> *p_parent = NULL) { 

    s_node<T> *p_newNode = new s_node<T>(); 

    p_newNode->value = 0; 
    p_newNode->p_next = NULL; 

    if (p_parent != NULL) { 
    p_parent->p_next = p_newNode; 
    } 

    return p_newNode; 
} 
0

エラーC2955: 's_node':クラステンプレートを使用すると、上記のエラーが問題が何であるかに非常に明白であるテンプレート 引数リスト

が必要です。

使用方法s_node *p_newNode = new s_node;が間違っています。

s_node<T> *p_newNode = new s_node<T>; 

テンプレート化されたクラスのテンプレート引数が必要です。また、クラスの戻り値の型があることが必要である:

s_node<T>* createNode(s_node *p_parent = NULL) { 
//.... 
} 

側注:勧告として、nullptr、代わりのNULLを使用し、それはより現代的です。

+0

回答が編集されました@chris –