Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2010, 18:41   #1
DKOI
 
Регистрация: 19.10.2010
Сообщений: 4
По умолчанию Ошибка при реализации метода класса, имеющего поле шаблоннного типа.

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

в STR.h пишу

template<class StrategyType>
class Context
{
public:
void Operation();
private:
StrategyType TheStrategy;
};

в STR.cpp

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 не даёт результатов). Подскажите, что можно сделать с такой бедой?
DKOI вне форума Ответить с цитированием
Старый 19.10.2010, 18:49   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

метод в хедере делать, а почему - гугль в помощь
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 19.10.2010, 18:57   #3
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

в файле .cpp
Код:
template<class StrategyType>

void Context<StrategyType>::Operation(){
//=========Твой метод========
}
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 19.10.2010, 19:02   #4
DKOI
 
Регистрация: 19.10.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Sam Gold Посмотреть сообщение
в файле .cpp
Код:
template<class StrategyType>

void Context<StrategyType>::Operation(){
//=========Твой метод========
}

Так не помогает, то есть те ошибки уходят, но появляется ошибка в основном файле на строчку
Context<AStrategy> AS;
AS.Operation();
undefined reference to `Context<AStrategy>::Operation()' Strategy.cpp /Strategy/src line 15 C/C++ Problem

Хм, нашел в инете, что нельзя в принципе компилировать реализацию шаблона в отдельном модуле, правда датировка серединой прошлого года хм...
DKOI вне форума Ответить с цитированием
Старый 19.10.2010, 19:04   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2DKOI
Цитата:
Хм, нашел в инете, что нельзя в принципе компилировать реализацию шаблона в отдельном модуле, правда датировка серединой прошлого года хм...
можно, если сделаешь forward instance, но так ты ограничишь себя в наборе типов
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 19.10.2010, 19:10   #6
DKOI
 
Регистрация: 19.10.2010
Сообщений: 4
По умолчанию

Понятно ) Значит придется оставить метод в хэдере ) Большое спасибо всем за помощь
DKOI вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание класса с полем типа TStringList. Ошибка при его заполнении Son Общие вопросы Delphi 8 13.04.2010 21:38
Пргограмма реализации метода эйлера Серг87 Помощь студентам 0 08.02.2010 09:33
Ошибка при создании типа Monte-Kristo Помощь студентам 4 04.03.2009 19:51