2014 dxdy logo

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

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




 
 Шаблоны C++
Сообщение28.02.2012, 11:07 
Аватара пользователя
Используется синтаксис 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 
Аватара пользователя
Походу не там спросил

 
 
 
 Re: Шаблоны C++
Сообщение28.02.2012, 15:13 
Используется синтаксис 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 
Разве не temptest<T>::f?

 
 
 
 Re: Шаблоны C++
Сообщение28.02.2012, 23:12 
Используется синтаксис 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 
Аватара пользователя
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 
Аватара пользователя
Оказывается есть книга Вандевурд, Джосаттис - Шаблоны C++. Справочник
Там норм про шаблоны написано.

 
 
 
 Re: Шаблоны C++
Сообщение29.02.2012, 19:47 
arseniiv
Зараза, но он же скомпилировался!

 
 
 
 Re: Шаблоны C++
Сообщение29.02.2012, 19:54 
Joker_vD в сообщении #543938 писал(а):
arseniiv
Зараза, но он же скомпилировался!
Дык, у вас получилась совершенно другая функция f(). А поскольку вы правильную f() не пытались вызвать, то её отсутствие компилятор не заметил.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group