Liste d'arguments pour modèle de classe est manquant

j'ai un problème curieux, et je ne suis pas tout à fait sûr de ce qu'est le problème. Je crée une classe appelée LinkedArrayList qui utilise un modèle de nom de type, comme indiqué dans le code ci-dessous:

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

maintenant, cela ne donne pas d'erreurs ou de problèmes. Cependant, les fonctions dans les .fichier cpp me donne l'erreur "de la liste d'arguments pour la classe template 'LinkedArrayList' est manquant."ItemType n'est pas défini. Voici le code, très simple, dans le .rpc:

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

on dirait qu'il a quelque chose à voir avec le modèle, parce que si je le commente et change les ItemTypes dans les fonctions en ints, il ne donne pas d'erreurs. Aussi, si je fais juste tout le code dans le .h au lieu d'avoir un séparé .rpc, il fonctionne très bien ainsi.

Toute aide sur la source du problème serait grandement apprécié.

Merci.

12
demandé sur user2146215 2013-03-08 02:38:42

1 réponses

tout d'Abord, voici comment vous devez fournir une définition des fonctions membres d'une classe template:

#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 fichier, parce que le compilateur ne sera pas capable de les instancier implicitement à partir de leur point d'invocation. Voir, par exemple, ce Q&A sur StackOverflow.

12
répondu Andy Prowl 2017-05-23 11:46:28