Argumentlijst voor Klasse Sjabloon ontbreekt

Ik heb een nieuwsgierig probleem, en ik weet niet helemaal zeker wat het probleem is. Ik maak een klasse met de naam LinkedArayList die een typenaamsjabloon gebruikt, zoals weergegeven in de onderstaande code:

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

Nu, dit geeft geen fouten of problemen. Het maken van de functies in het .cpp-bestand geeft me echter de fout “Argumentlijst voor klassejabloon” LinkedAryLayList ‘ontbreekt. ” Het zegt ook dat itemtype ongedefinieerd is. Hier is de code, heel eenvoudig, in de .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;}

Het lijkt erop dat het iets te maken heeft met de sjabloon, want als ik het opmerkt en de onderdelen in de functies naar Ints kan wijzigen, geeft het geen fouten. Ook, als ik gewoon alle code in de .h doe in plaats van een afzonderlijke .cpp, werkt het prima ook goed.

Elke hulp bij de bron van het probleem zou zeer op prijs worden gesteld.

bedankt.


Antwoord 1, Autoriteit 100%

Allereerst is dit hoe u een definitie moet geven voor ledenfuncties van een klassejabloon:

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

Ten tweede kunnen die definities niet in een .cpp-bestand worden geplaatst, omdat de compiler ze niet impliciet kan instantiëren vanuit het punt van aanroepen. Zie bijvoorbeeld deze Q&A op StackOverflow.

Other episodes