2013-03-07 53 views
11

Mam ciekawy problem i nie jestem do końca pewien, na czym polega problem. Tworzę klasę o nazwie LinkedArrayList który używa szablonu typename, jak pokazano w poniższym kodzie:Brakuje listy argumentów dla szablonu klasy

#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); 
}; 

Teraz, to nie daje żadnych błędów lub problemów. Jednak tworzenie funkcji w pliku .cpp powoduje błąd "Brak listy argumentów dla szablonu klasy" LinkedArrayList "." Mówi również, że ItemType jest niezdefiniowany. Oto kod, bardzo prosty w .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;} 

Wygląda na to, że ma coś wspólnego z szablonu, bo gdybym skomentować go i zmienić ItemTypes w pełnieniu funkcji wskazówki, nie robi nie dają żadnych błędów. Ponadto, jeśli po prostu robię cały kod w .h zamiast mieć oddzielne .cpp, to działa również dobrze.

Każda pomoc dotycząca źródła problemu byłaby bardzo doceniana.

Dzięki.

Odpowiedz

13

Przede wszystkim, jest to w jaki sposób należy podać definicję funkcji składowej klasy szablonu:

#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;} 

drugie, definicje te nie mogą być wprowadzane w pliku .cpp, ponieważ kompilator nie będzie zdolne do utworzenia ich pośrednio z punktu inwokacji. Zobacz na przykład this Q&A on StackOverflow.

Powiązane problemy