2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Шаблоны C++
Сообщение28.02.2012, 11:07 
Аватара пользователя


21/04/09
195
Используется синтаксис C++
template<class T> class temptest
{
        T a;
public:
        temptest();
        ~temptest(){}
        template<class Y> void f(Y a){}
};

template <class T> temptest<T> :: temptest()
{
        cout << "constructor temptest" << "\n";
}



как определить метод f вне класса, как конструктор???

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение28.02.2012, 15:04 
Аватара пользователя


21/04/09
195
Походу не там спросил

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение28.02.2012, 15:13 
Заслуженный участник


09/09/10
3729
Используется синтаксис C++
template<class T> class temptest {
    T a;
public:
    temptest();
    ~temptest();
    template<class Y> void f(Y a);
};

template<class T> temptest<T>::temptest() {
    cout << "constructor temptest" << endl;
}

template<class T, class Y> void f(Y a) {
    cout << a << endl;
}

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение28.02.2012, 17:28 
Заслуженный участник


27/04/09
28128
Разве не temptest<T>::f?

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение28.02.2012, 23:12 
Заслуженный участник


31/12/05
1517
Используется синтаксис C++
template<class T> template<class Y> void temptest<T>::f(Y a){}


http://stackoverflow.com/questions/8862 ... late-class

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение29.02.2012, 08:14 
Аватара пользователя


21/04/09
195
tolstopuz Спасибо =)

А есть ли возможность определить мой методо f не только вне описания класса, но и в соседнем файле?

пытаюсь, пишу

Используется синтаксис C++
//это файл temptest.cpp
#include "temptest.h" //описание класса


  template <class T> template<class Y>   void temptest<T> :: f(Y a)
{

}


и оно компилируется, но если я пытаюсь вызвать эту самую функцию

Используется синтаксис C++
//это фалй main.cpp
#include <iostream>
#include "temptest.h"//описание класса

using namespace std;

void main()
{
char end='4';
temptest<char> c;
c.f<char>( end);
cin >> end;
}



вылетает ошибка =(((

1>main.obj : error LNK2019: unresolved external symbol "public: void __thiscall temptest<char>::f<char>(char)" (??$f@D@?$temptest@D@@QAEXD@Z) referenced in function _main

ЗЫ, если описание класса и определение метода "f" находятся в одном файле, то все норм. Почему так?

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение29.02.2012, 15:05 
Аватара пользователя


21/04/09
195
Оказывается есть книга Вандевурд, Джосаттис - Шаблоны C++. Справочник
Там норм про шаблоны написано.

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение29.02.2012, 19:47 
Заслуженный участник


09/09/10
3729
arseniiv
Зараза, но он же скомпилировался!

 Профиль  
                  
 
 Re: Шаблоны C++
Сообщение29.02.2012, 19:54 
Заслуженный участник


04/05/09
4587
Joker_vD в сообщении #543938 писал(а):
arseniiv
Зараза, но он же скомпилировался!
Дык, у вас получилась совершенно другая функция f(). А поскольку вы правильную f() не пытались вызвать, то её отсутствие компилятор не заметил.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group