Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
1

Вызов метода у шаблонного поля, шаблонного класса

06.12.2014, 00:40. Показов 3753. Ответов 1
Метки нет (Все метки)

Пытаюсь разобраться с шаблонами- задача создать шаблонный класс, у которого есть шаблонное поле. и затем вызывать метод у этого поля.

две реализации тестовых классов A,B
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//A.h
#include <iostream>;
 
class A
{
public:
    A(){}
    void print();
}
 
//A.cpp
#include "A.h";
 
 
void A::print()
{
    std::cout << "in A class\n";
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//B.h
#include <iostream>;
 
class B
{
public:
    B(){}
    void print();
}
 
//B.cpp
#include "B.h";
 
void B::print()
{
    std::cout << "in B class\n";
}
шаблонный класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Templ.h
template <class T>
class Templ
{
public:
    template <class T>
    void run();
 
private:
    T t;
};
 
#include "Templ.hpp";
 
//Templ.hpp
template <class T>
void Templ::run()
{
    t.print();
}
ну и main класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//driver.cpp
#include <iostream>
#include "Templ.h";
#include "A.h";
#include "B.h";
using namespace std;
 
int main()
{
    Templ<A> obj1;
    obj1.run();      //ошибка компиляции на "точке" 
//Error:отсутствуют экземпляры шаблон функции "Templ<T>::run [c T=A], соответствующие списку аргументов
 
    Templ<B> obj2;
    obj2.run();     //тоже самое
 
    system("pause");
    return 0;
}
Как исправить положение подскажите пожалуйста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2014, 00:40
Ответы с готовыми решениями:

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

Вызов шаблонного метода в зависимости от условия
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;queue&gt; #include &lt;type_traits&gt; ...

Вызов конструктора шаблонного класса
Есть шаблонный класс стек, он является полем в классе Express, но компилятор выдает ошибку &quot;...

Функция как аргумент шаблонного метода класса
Пытаюсь передать функцию для сравнения в сортировке слиянием, но что-то не получается. Подскажите,...

1
С чаем беда...
Эксперт CЭксперт С++
9415 / 4916 / 1343
Регистрация: 18.10.2014
Сообщений: 11,447
06.12.2014, 00:47 2
Цитата Сообщение от newb_programmer Посмотреть сообщение
Как исправить положение подскажите пожалуйста!
Во-первых, что такое "шаблонное поле"? Что имеется в виду?

Во-вторых, почему функция 'run' сделана шаблоном функции внутри шаблона класса?? Какой смысл в таком двойном нагромождении шаблонов?

Если вы все таки хотите, чтобы функция 'run' была шаблоном внутри шаблона, то обявлять ее следует так

C++
1
2
3
4
5
6
7
template <class T>
class Templ
{
public:
    template <class U>
    void run();
    ...
т.е. следует дать другое имя параметру внутреннего шаблона. А определать ее потом следует так

C++
1
2
3
4
5
template <class T> template <class U>
void Templ<T>::run()
{
    t.print();
}
В-третьих, я все таки не вижу причин для сущестования вложенного шаблона для 'run'. У вас в коде ничего не завивисит от параметра 'U'. Зачем он тогда? Уберите это вложенный шаблон нафиг и сделайте просто

C++
1
2
3
4
5
6
template <class T>
class Templ
{
public:
    void run();
    ...
C++
1
2
3
4
5
template <class T>
void Templ<T>::run()
{
    t.print();
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2014, 00:47

Неявный вызов конструктора шаблонного класса при операции сравнения
Реализовал шаблонный класс целых чисел, для использования его в шаблонном классе дробей. Звучит...

Ошибка в определении шаблонного метода
Подскажите пожалуйста, что делаю не так в определении шаблонного метода. Вот код: // test.cpp...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Вынести реализацию шаблонного метода в cpp
Есть класс с публичным шаблонным методом. В заголовочном файле определен этот метод, а в cpp файле...

Аргументы шаблонного метода как объекты
Не могу решить одну задачу. вот три класса class win {}; class obj1 {}; class obj2 {};

Реализация шаблонного метода с переменным числом параметров
Добрый день! Не могу придумать, как реализовать метод, позволяющий принимать переменное кол-во...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru