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

шаблонные функции - C++

Восстановить пароль Регистрация
 
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
26.11.2013, 17:43     шаблонные функции #1
доброго времени суток уважаемые форумчане, помогите пожалуйста разобраться с шаблонными функциями, читал про них много но так и не понял почему у меня ошибка. дело обстоит так:
имеется класс визитор, в нем объявляю шаблонную функцию
visitor.h
C++
1
2
template<typename It> 
    void VisitAll(It s, It e);
visitor.cpp
C++
1
2
3
4
5
6
7
8
9
void CGeometryObjectToXMLSerializerVisitor::VisitAll(It s, It e)
{
    m_strm << "<geometryObjects>"<< std::endl;
    for (auto i = s; i!= e; i++)
    {
    ... 
    }
    m_strm << "</geometryObjects>"<<std::endl;
}
но при попытке обратиться к этой функции допустим отсюда

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CGeometryObjectSerializersTestSuite::TestCPoint2DToXMLSerializer()
{
    std::string testStr = GetReadString("SerializerTestFile/test_point2d.xml");
    std::ofstream strm;
    strm.open("SerializerTestFile/point2d.xml");
    std::vector <IGeometryObject*> objects;
    
    CGeometryObjectToXMLSerializerVisitor xmlSerializer(strm);
    objects.push_back(new CPoint2D);
        xmlSerializer.VisitAll(objects.begin(), objects.end());
 
    std::string outStr = GetReadString("SerializerTestFile/point2d.xml");
    TS_ASSERT_EQUALS(outStr, testStr);
}
вылетает error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall CGeometryObjectToXMLSerializerVisitor::VisitAll

заранее благодарен за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2013, 17:43     шаблонные функции
Посмотрите здесь:

Шаблонные функции C++
C++ Шаблонные функции
C++ Шаблонные функции
Шаблонные функции C++
C++ Шаблонные функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
26.11.2013, 18:01     шаблонные функции #2
Возможно так
C++
1
2
template<typename It, typename It1> 
 void VisitAll(It s, It1 e);
если функция с двумя параметрами.
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
26.11.2013, 18:03  [ТС]     шаблонные функции #3
Цитата Сообщение от Genn55 Посмотреть сообщение
Возможно так
C++
1
2
template<typename It, typename It1> 
 void VisitAll(It s, It1 e);
если функция с двумя параметрами.
к сожалению нет, сейчас попробовал, не помогло.=(
ssXXss
263 / 185 / 10
Регистрация: 15.01.2011
Сообщений: 668
26.11.2013, 18:04     шаблонные функции #4
небольшой примерчик :
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//*.h
class MyClass
{
    int x;
    double d;
public:
    MyClass()
    {
        x = 100;
        d = 100.55;
    }
    ~MyClass(){}
 
    template<typename T>
    T func(T t,T t2)
    {
        return t + t2;
    }
    int sum(int x2)
    {
        return func<int>(x2 , x);
    }
    double sum(double d1)
    {
        return func<double>(d1,d);
    }
};
//main.cpp
//#include...
void main()
{
 MyClass mc;
 std::cout<<mc.sum(123)<<endl;;
 std::cout<<mc.sum(123.123)<<endl;
 std::cout<<mc.func<double>(0.99,0.33)<<endl;
 }
//вывод :
//223 
//223.673 
//1.32
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.11.2013, 18:06     шаблонные функции #5
Реализация шаблонной функции должна быть в хедере.
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
26.11.2013, 18:10  [ТС]     шаблонные функции #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Реализация шаблонной функции должна быть в хедере.
спасибо, сейчас попробую, я даже не подумал об этом как то.
Yandex
Объявления
26.11.2013, 18:10     шаблонные функции
Ответ Создать тему
Опции темы

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