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

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

Войти
Регистрация
Восстановить пароль
 
Jawello
1 / 1 / 0
Регистрация: 26.05.2009
Сообщений: 18
#1

Наследование и шаблоны - C++

07.01.2014, 23:57. Просмотров 567. Ответов 2
Метки нет (Все метки)

Доброе время суток.

Есть три класс: interface.h
C++ (Qt)
1
2
3
4
5
6
7
 template <class T>
    class interface
    {
    public:
        interface();
        virtual ~interface() = 0;
    };
base.h

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
template<class T>
class base : public interface<T>
{
public:
    base();
    ~base();
 
    T get();
public:
    T some;
};
derived.h
C++ (Qt)
1
2
3
4
5
6
7
template<class T>
class derived : public base<T>
{
public:
    derived();
    ~derived();
};
Реализация классов interface.cpp

C++ (Qt)
1
2
3
4
   template <class T>
    interface<T>::interface()
    {
    }
base.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
template<class T>
base<T>::base()
{
 
}
 
template<class T>
T base<T>::get()
{
    return this->some;
}
derived.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
template<class T>
    derived<T>::derived()
    {
 
    }
 
    template<class T>
    derived<T>::~derived()
    {
 
    }
в файле main.cpp

C++ (Qt)
1
2
3
4
5
6
7
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    derived<QString> test();
    test.get();
    return a.exec();
}
на строчке test.get(); компилятор выдает ошибку: request for member 'get' in 'test', which is of non-class type 'derived<QString>()'

не могу понять в чем причина данной ошибки. Метод get - public, все наследование через public. Изначально был более сложный подобный код, выдавалась ошибка: undefined reference to `Derived<T>:erived(QFile&)', решил упростить задачу и понять в чем дело, но наткнулся новую ошибку. Как видно из main использую Qt Creator, компилятор MinGW.

спасибо.
п.с. а если в main написать derived<QString> test;, то компилятор выдает следующее: 8: ошибка: undefined reference to derived<QString>::derived()' 10: ошибка: undefined reference tobase<QString>::get()'

Собственно это ошибки, из-за который я и писал тестовый код.

п.п.с. тот же вопрос задал на ХэшКоде)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2014, 23:57     Наследование и шаблоны
Посмотрите здесь:

Наследование и шаблоны - C++
Доброго времени суток всем! Требуется внести ясность в следующую задачу. Существует абстрактный класс AbstractGenerator&lt;имя типа&gt; (не...

Наследование и шаблоны - C++
Не понимаю почему выдается ошибки, переменные а, b не объявлены в данном контексте (внутри функции f) Сейчас почитал прату, и...

Наследование и шаблоны - C++
Здравствуйте. У меня возникла проблема. Есть 4 класса: Father - абстрактный шаблонный класс (типа интерфейс) Son - его потомок с...

Наследование и шаблоны - C++
Почему при использовании шаблонов при обращении к элементам класса нужно явно указывать потомка или this? Ведь при наследовании без...

Шаблоны и наследование - C++
Есть код с учебника: #include &lt;iostream&gt; #include &lt;typeinfo&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; template &lt;class T&gt; class...

Функциональные шаблоны и наследование - C++
#include &lt;list&gt; using namespace std; class A { public: virtual void doit() =0; };

Шаблоны, наследование и размер типа - C++
Суть вопроса в том, что имея два шаблона класса, унаследованных от общего предка, и инстанциируя &quot;один другим&quot; имеем + n байт к размеру...

Не могу разобраться с ошибками, наследование и шаблоны - C++
Задание: Смоделировать стек на базе статического массива по заданию. Написать основные операции для работы со стеком (push, pop, top,...

[Классы, Наследование, Шаблоны] Добавление записи в список - C++
В данной программе используется наследование с применением шаблонов класса. В другой похожей программе не используя наследования программа...

Шаблоны - C++
На сколько я знаю, в с++ нельзя указать типу шаблона что то вроде: &lt;T extends MyClass&gt; Поэтому такой код: class A { public: ...

Шаблоны - C++
Когда разделяю реализацию и прототип шаблонной в функции по разным файлам (*.h и *.cpp) происходит ошибка линковки... Я так понимаю, делать...

Шаблоны - C++
Вспомнилось что во время чтения инфы про шаблоны, находил предложения от Страуструпа &quot;посмотреть код который генерируется из шаблона при...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15248 / 6880 / 1092
Регистрация: 02.05.2013
Сообщений: 11,262
Завершенные тесты: 1
08.01.2014, 00:15     Наследование и шаблоны #2
Цитата Сообщение от Jawello Посмотреть сообщение
derived<QString> test();
Это не создание экземпляра класса, это объявление функции test,
которая не имеет аргументов и возвращает derived<QString>.
Пробуйте так:
C++
1
derived<QString> test;
Jawello
1 / 1 / 0
Регистрация: 26.05.2009
Сообщений: 18
08.01.2014, 01:37  [ТС]     Наследование и шаблоны #3
Убежденный, Согласен.

А вот вторая ошибка имеет другую природу. мне ответили на ХэшКоде: А undefined reference -- это уже другая ошибка. Ошибка компоновщика. Поместите реализацию шаблона в .h. Вот Объяснение
Yandex
Объявления
08.01.2014, 01:37     Наследование и шаблоны
Ответ Создать тему
Опции темы

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