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

У меня любопытная проблема, и я не совсем уверен, в чем проблема. Я создаю класс LinkedArrayList, который использует шаблон typename, как показано в коде ниже:

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

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

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

Благодарю.

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 файл, потому что компилятор не сможет неявно создать их экземпляр с момента их вызова. Смотрите, например, этот вопрос& на StackOverflow.

13

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]