Подтвердить что ты не робот

Недопустимый список аргументов для шаблона класса

У меня возникла любопытная проблема, и я не совсем понимаю, в чем проблема. Я создаю класс под названием 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 - undefined. Вот код, очень простой, в .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;}

Похоже, что это имеет какое-то отношение к шаблону, потому что, если я прокомментирую это и изменим ItemTypes в функциях ints, он не даст никаких ошибок. Кроме того, если я просто делаю весь код в .h вместо отдельного .cpp, он также отлично работает.

Приветствуется всякая помощь по источнику проблемы.

Спасибо.

4b9b3361

Ответ 1

Прежде всего, так вам следует предоставить определение функций-членов шаблона класса:

#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, потому что компилятор не сможет инстанцировать их неявно из своей точки вызова. См., Например, fooobar.com/info/1162/....