Классы шаблонов многофайлового проекта — как?

Возможный дубликат:
Почему шаблоны могут быть реализованы только в заголовочном файле?
Почему реализация и объявление класса шаблона должны находиться в одном заголовочном файле?

Я работаю над проектом, где мне нужен мой «стек» для сохранения данных. Но я не хочу кодировать разные версии для каждого типа файла (и я не хочу использовать векторы).

Поэтому я пытаюсь использовать шаблон класса, и это мой код:

StructStack.h

#ifndef STRUCTSTACK_H_
#define STRUCTSTACK_H_

template <class AnyType> class StructStack {
StructStack();
~StructStack();
struct Element {
Element *pointer;
AnyType value;
};
Element *pointerToLastElement;
int stackSize;
int pop();
void push(int value);
int size();
};

#endif

StructStack.cpp

#include "stdafx.h"#include "StructStack.h"#include <iostream>
using namespace std;template <class AnyType> void StructStack<AnyType>::StructStack() {
//code
}

template <class AnyType> void StructStack<AnyType>::~StructStack() {
//code
}

template <class AnyType> AnyType StructStack<AnyType>::pop() {
//code
}

template <class AnyType> void StructStack<AnyType>::push(AnyType value){
//code
}

template <class AnyType> AnyType StructStack<AnyType>::size() {
//code
}

Если я пытаюсь скомпилировать эти два файла, я получаю кучу ошибок компиляции. Я читал в Интернете, что довольно сложно создать шаблонный класс в многофайловом проекте.

Так как это можно сделать?

0

Решение

Вы можете решить эту проблему, поместив все определения (код, который у вас есть в StructStack.cpp) в StructStack.hи удаление первого. Компилятор должен иметь доступ к коду реализации, чтобы он мог создавать экземпляр шаблона класса по мере необходимости.

1

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

Вам просто нужно поместить определения ваших функций в заголовочный файл.
Все, что вы написали внутри StructStack.cpp должен идти в StructStack.h после определения класса.

2

Шаблонный код должен просматриваться каждым файлом, который его использует.

Он не скомпилируется, пока не станет специализированным или не используется.

В основном, если вы хотите использовать его в разных файлах, вам придется поместить его в заголовочный файл, а затем включить его. Когда вы на самом деле используете шаблоны определенного типа, код будет сгенерирован в том контексте, в котором он используется.

1

Код шаблонов C ++ всегда должен быть помещен в заголовочный файл, чтобы реализация была видна в каждом модуле перевода, где вы хотите создать экземпляр шаблона. Если вам нравится, вы можете разделить код на файлы * .h и * .cpp, но вы все равно должны #include * .cpp файл в конце файла * .h.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector