Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
#1

Ошибка при реализации класса, использующего шаблоннный тип. - C++

19.10.2010, 18:19. Просмотров 355. Ответов 3
Метки нет (Все метки)

Пытаюсь реализовать шаблон Strategy

в STR.h пишу

C++
1
2
3
4
5
6
7
8
template<class StrategyType>
class Context
{
public:
    void Operation();
private:
    StrategyType TheStrategy;
};
в STR.cpp

C++
1
2
3
4
void Context::Operation()
{
    TheStrategy.Algoritm();
}
Компилятор выдаёт ошибки:
`template<class StrategyType> class Context' used without template parameters STR.cpp /Strategy/src line 13 C/C++ Problem
`TheStrategy' was not declared in this scope STR.cpp /Strategy/src line 15 C/C++ Problem

Если писать реализацию метода в хэдере, то всё прекрасно работает, но хотелось всю реализацию спихнуть в отдельный файл, а компилятору, видимо, не нравится, что поле не описано в этом файле (ибо замена спецификатора поля на public не даёт результатов). Подскажите, что можно сделать с такой бедой?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2010, 18:19     Ошибка при реализации класса, использующего шаблоннный тип.
Посмотрите здесь:

C++ Как описывать функции, заданные в шаблоне класса, тип возвращаемого значения которых совпадает с именем класса
C++ Ошибка при использовании итератора в реализации класса
C++ Статическое поле класса, имеющее тип того же класса
C++ Не использовать имя класса при его реализации
Code::Blocks, ошибки при сборке проекта, использующего OpenGL C++
Деструктор для абстрактного класса, использующего static vector C++
Ошибка при реализации бинарного дерева: error C1075: конец файла обнаружен ранее, чем левая фигурная скобка C++
Трудности в реализации класса C++
Ошибка при реализации стека C++
C++ Ошибка при реализации move конструктора для списка
Ошибка компиляции при реализации класса-шаблона C++
C++ Ошибка при реализации калькулятора

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
19.10.2010, 19:14     Ошибка при реализации класса, использующего шаблоннный тип. #2
Шаблон - это не класс, а заготовка, по которой компилятор напишет класс и его методы при инстанциации (это когда ты подставишь конкретные типы в параметре шаблона). Поэтому методы шаблонов в .cpp не выносятся, а пишутся в том же заголовке. Проще всего описать метод прямо при его объявлении внутри класса, но можно и так:
C++
1
2
3
4
5
template<class StrategyType>
void Context<StrategyType>::Operation()
{
    // ...
}
DKOI
24 / 24 / 1
Регистрация: 08.09.2010
Сообщений: 136
19.10.2010, 19:30  [ТС]     Ошибка при реализации класса, использующего шаблоннный тип. #3
Спасибо, так получается, но только если реализация остаётся в хэдере. Если выносить в срр фаил, то всё равно выскакивает ошибка, но уже при вызове метода типа:
Context<AStrategy> AS;
AS.Operation();

Как оказалось при раскопках в интернете, сделать реализацию метода, если используется шаблон, в отдельном модуле практически не представляется возможным (можно сделать, как выяснилось, forward instance, но к сожалению я не смог раскопать что это такое, да и оно ограничивает количество возможных для использования типов, как я прочитал)
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
19.10.2010, 19:48     Ошибка при реализации класса, использующего шаблоннный тип. #4
Я об этом и говорил. Метод у шаблона - это не функция. Это образец, по которому будут создаваться методы создаваемых классов при инстанциации. Подставили один тип - из шаблона создаётся класс, создаются методы к нему. Подставили другой тип - создаётся ещё один класс, к нему создаются свои методы.
Yandex
Объявления
19.10.2010, 19:48     Ошибка при реализации класса, использующего шаблоннный тип.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru