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

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

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

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

19.10.2010, 18:19. Просмотров 364. Ответов 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 не даёт результатов). Подскажите, что можно сделать с такой бедой?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2010, 18:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при реализации класса, использующего шаблоннный тип. (C++):

Ошибка компиляции при реализации класса-шаблона - C++
Не могу понять почему компилятор ругается. Помогите разобраться. #include &lt;iostream&gt; using namespace std; template...

Ошибка при использовании итератора в реализации класса - C++
На скрине всё понятно чо каво. Собственно, что я упустил? Что не дочитал? Проясните, пожалуйста. Из-за медленного интернета не могу...

Не использовать имя класса при его реализации - C++
Из-за того, что не смог грамотно сформулировать свой вопрос, не нашел ничего в гугле :( Поэтому объясню на примере: Допустим, есть...

Отделение интерфейса от реализации класса: компиляция кода реализации - C++
Доброго времени суток, У меня возникла проблема с отделением интерфейса от реализации класса. Допустим, у меня есть три файла: 1....

Деструктор для абстрактного класса, использующего static vector - C++
Доброго времени суток. Возникла проблема с написание деструктора абстрактного класса, использующего static vector для хранения ссылок на...

Ошибка при реализации стека - C++
Здравствуйте, помогите пожалуйста разобраться в ошибке.Пишу класс, в нём есть динамический символьный массив, вызываю функцию void без...

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

Как оказалось при раскопках в интернете, сделать реализацию метода, если используется шаблон, в отдельном модуле практически не представляется возможным (можно сделать, как выяснилось, forward instance, но к сожалению я не смог раскопать что это такое, да и оно ограничивает количество возможных для использования типов, как я прочитал)
0
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
19.10.2010, 19:48 #4
Я об этом и говорил. Метод у шаблона - это не функция. Это образец, по которому будут создаваться методы создаваемых классов при инстанциации. Подставили один тип - из шаблона создаётся класс, создаются методы к нему. Подставили другой тип - создаётся ещё один класс, к нему создаются свои методы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2010, 19:48
Привет! Вот еще темы с ответами:

Ошибка при реализации калькулятора - C++
Собственно, пишу первую программу (банальный калькулятор), принцип его работы такой: Пользователь выбирает нужное ему действие с числами,...

Удаление экземпляра класса в функции самого класса (Ошибка при отладке) - C++
Допустим, у нас есть класс Buffer, который хранит в себе указатель на класс некоторой матрицы и количество этих указателей refcounter ...

Ошибка при работе с объектом класса в конструкторе другого класса - C++
Имеется данный код: https://github.com/ubelian/glgame/tree/master/glgame В файле Food.cpp в конструкторе класса Food::Food() на 19...

Ошибка при вызове метода класса в методе другого класса - C++
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса выходит такая ошибка &quot; нестандартный...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.10.2010, 19:48
Ответ Создать тему
Опции темы

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