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

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

Восстановить пароль Регистрация
 
Jawello
1 / 1 / 0
Регистрация: 26.05.2009
Сообщений: 18
07.01.2014, 23:57     Наследование и шаблоны #1
Доброе время суток.

Есть три класс: 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++
C++ Не могу разобраться с ошибками, наследование и шаблоны
C++ Шаблоны, наследование и размер типа
Шаблоны и наследование C++
C++ Функциональные шаблоны и наследование
Наследование и шаблоны C++
Наследование и шаблоны C++
C++ [Классы, Наследование, Шаблоны] Добавление записи в список

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,304
Завершенные тесты: 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     Наследование и шаблоны
Ответ Создать тему
Опции темы

Текущее время: 11:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru