LINUX.ORG.RU

Шаблон класса


0

0

Подскажите пожалуйста, вот описываю класс:
#ifndef __KONTEINER_H__
#define __KONTEINER_H__
#include <QVector>
#include "kombi_figure.h"
template <class Kombi_figure> class Konteiner{
private:
QVector <Kombi_figure> vect;
public:
void add(Kombi_figure &);
void del(Kombi_figure &);
int locate(Kombi_figure &);
void full_out();
int col();
};
// place your code here

#endif // __KONTEINER_H__

Начинаю реализовывать методы его:
#include "konteiner.h"
void Konteiner::add(Kombi_figure &x){

}
void Konteiner::del(Kombi_figure &){

}
int Konteiner::locate(Kombi_figure &){

}
void Konteiner::full_out(){

}
int Konteiner::col(){

}

// place your code here

Он мне ругается:
src/konteiner.cpp:2: ошибка: использование ‘template<class Kombi_figure> class Konteiner’ без параметров шаблона
src/konteiner.cpp:2: предупреждение: unused parameter ‘x’
src/konteiner.cpp:5: ошибка: использование ‘template<class Kombi_figure> class Konteiner’ без параметров шаблона
src/konteiner.cpp:8: ошибка: использование ‘template<class Kombi_figure> class Konteiner’ без параметров шаблона
src/konteiner.cpp:11: ошибка: использование ‘template<class Kombi_figure> class Konteiner’ без параметров шаблона
src/konteiner.cpp:14: ошибка: использование ‘template<class Kombi_figure> class Konteiner’ без параметров шаблона

(на реализацию типо). Я не могу понять в чом косяк, что я делаю не так.

★★

Реализации пиши в том же заголовочном файле. Все равно же без специализации она скомпилироваться не может.

anonymous
()

шаблоны - это такой препроцессор только type-safe. шаблонные классы лежат всегда в хедерах

generatorglukoff ★★
()
Ответ на: комментарий от anonymous

Зачем в заголовочном классе? Это ж не тру. И я ж типо "заглушки" на методы поставил, почему бы ему не скомпилиться? Я б понял если б ругался на методы где у меня должно ретернится но не ретернится, а так на все подряд.

DDR ★★
() автор топика

> Я не могу понять в чом косяк, что я делаю не так.

Не обижайся, но ты просто не понимаешь, что такое шаблоны.

Ну или хотя бы попробуй реализовывать методы прямо в теле класса.

tailgunner ★★★★★
()
Ответ на: комментарий от DDR

Запихал, все заработало:) всем огромное спасибо:) А если не сложно вот у меня типо тут контейнер для объектов класса Комби_фигура, а как бы выглядел в моем случае 1 контейнер для объектов двух разных фигур? Я чот попробовал в вектор 2 типа запихать , но ругается, посмотрел в ассистене и вроде понял что только 1 аргумент. Значит вектор для такого контейнера не подойдет?

DDR ★★
() автор топика
Ответ на: комментарий от dilmah

>для KDE пишешь?
Для лабы пишу.

DDR ★★
() автор топика
Ответ на: комментарий от tailgunner

>Не обижайся, но ты просто не понимаешь, что такое шаблоны.
Я не обижаюсь, я возможно не совсем четко понимаю, но представления имею небольшое, а вот с реализацией туго:(

DDR ★★
() автор топика
Ответ на: комментарий от DDR

>Не обижайся, но ты просто не понимаешь, что такое шаблоны.
>Я не обижаюсь, я возможно не совсем четко понимаю, но представления имею небольшое, а вот с реализацией туго:(

да пошел читать еще про шаблоны

DDR ★★
() автор топика
Ответ на: комментарий от DDR

>Запихал, все заработало:) всем огромное спасибо:) А если не сложно вот у меня типо тут контейнер для объектов класса Комби_фигура, а как бы выглядел в моем случае 1 контейнер для объектов двух разных фигур?

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

jtootf ★★★★★
()
Ответ на: комментарий от dont

>Почитай про экспорт шаблонов. Вроди бы последняя жсс уже это поддерживает.

а толку?

jtootf ★★★★★
()
Ответ на: комментарий от DDR

>Зачем в заголовочном классе? Это ж не тру

бери любой справочник по C++ (или конкретно по шаблонам C++) и читай, почему так

jtootf ★★★★★
()

То что ты пытаешься сделать, наверняка можно сделать без использования шаблона. Например, просто использовать один базовый класс и использовать свойства полиморфизма.

smh ★★★
()
Ответ на: комментарий от smh

>То что ты пытаешься сделать, наверняка можно сделать без использования шаблона. Например, просто использовать один базовый класс и использовать свойства полиморфизма.

гомогенный контейнер без обобщённых типов, на одном динамическом полиморфизме? код в студию

jtootf ★★★★★
()
Ответ на: комментарий от smh

>То что ты пытаешься сделать, наверняка можно сделать без использования шаблона. Например, просто использовать один базовый класс и использовать свойства полиморфизма.
Я ж вроде написал, что это лаба. ТЗ лабы выложить? Или преподу попробовать залечить, что он не шарит чего хочет?

DDR ★★
() автор топика
Ответ на: комментарий от jtootf

>гомогенный контейнер без обобщённых типов, на одном динамическом полиморфизме? код в студию

согласен, немного двусмысленно прозвучала моя реплика. Я имею ввиду, говоря "без шаблона" то, что не нужно писать свой шаблон, а достаточн о уже существующего - вектора, а хранить в нем объекты-наследники от некоего базового класса.

smh ★★★
()
Ответ на: комментарий от smh

>согласен, немного двусмысленно прозвучала моя реплика. Я имею ввиду, говоря "без шаблона" то, что не нужно писать свой шаблон, а достаточн о уже существующего - вектора, а хранить в нем объекты-наследники от некоего базового класса.

ну, зачем ему класс-обёртка я не знаю, факт

jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.