2013-03-07 48 views
11

私は不思議な問題を抱えていますが、問題の内容がよく分かりません。次のコードのように私は、型名のテンプレートを使用していますLinkedArrayListというクラスを作成しています:クラステンプレートの引数リストがありません

#pragma once 

template <typename ItemType> 

class LinkedArrayList 
{ 

private: 

class Node { 
    ItemType* items; 
    Node* next; 
    Node* prev; 
    int capacity; 
    int size; 
}; 

Node* head; 
Node* tail; 
int size; 

public: 

void insert (int index, const ItemType& item); 
ItemType remove (int index); 
int find (const ItemType& item); 
}; 

は今、これは任意のエラーまたは問題を与えるものではありません。しかし、.cppファイルに関数を作成すると、「クラステンプレート 'LinkedArrayList'の引数リストが見つかりません」というエラーが表示されます。 ItemTypeは未定義です。ここで.cppファイル内のコード、非常にシンプルで、次のとおりです。

#include "LinkedArrayList.h" 

void LinkedArrayList::insert (int index, const ItemType& item) 
{} 

ItemType LinkedArrayList::remove (int index) 
{return ItemType();} 

int find (const ItemType& item) 
{return -1;} 

私はそれをコメントアウトし、int型への関数でItemTypesを変更した場合、それはdoesnのためには、テンプレートとは何かを持っているように見えます何か誤りがある。また、別の.cppを持つ代わりに.hのすべてのコードを実行するだけで、うまく動作します。

問題の原因に関する助けをいただければ幸いです。

ありがとうございました。

答えて

13

まず第一に、これはあなたがクラステンプレートのメンバ関数の定義を提供する方法である:コンパイラができなくなりますので、第二に

#include "LinkedArrayList.h" 

template<typename ItemType> 
void LinkedArrayList<ItemType>::insert (int index, const ItemType& item) 
{} 

template<typename ItemType> 
ItemType LinkedArrayList<ItemType>::remove (int index) 
{return ItemType();} 

template<typename ItemType> 
int LinkedArrayList<ItemType>::find (const ItemType& item) 
{return -1;} 

、それらの定義は、.cppファイルに入れることができません呼び出しの点からそれらを暗黙的にインスタンス化することができます。たとえば、this Q&A on StackOverflowを参照してください。

関連する問題