На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Шаблоны (templates) в С++ , The problem with templates...
    Не могу понять причину, по которой программа не компилируется. Вот краткое введение в суть дела:

    Главный файл main.cpp:

    #include <iostream.h>
    #include "function.h"

    void main()
    {
    int x = max(4,5);
    }

    Файл "function.h":

    template <class T> T max(T x, T y);

    Файл "function.cpp":

    template <class T> T max(T x, T y)
    {
    return ((x < y)? y : x);
    }

    Почему программа не компилируется?

    P.S. 1) Если не пользоваться шаблонами, то все проходит;
    2) Если реализацию функции max написать либо в самом .h - файле, либо в main.cpp (а не в function.cpp), то все проходит вновь.

    Язык программирования = Visual C++ 6.0.
    Сообщение об ошибке: main.obj : error LNK2001: unresolved external symbol "int __cdecl max(int,int)" (?max@@YAHHH@Z)
      Определения шаблонных классов и функций нельзя разносить по *.h и *.cpp
      Не знаю, работает ли явная специализация на VC6. Но она редко используется.
        Не ожидал получить столь быстрого ответа. Спасибо!
        Т.е., если я правильно понял, шаблоны функций (и классов) могут обявляться в h-файле только вместе с их реализациями?
          1. можно, если пользоваться export
          2. #include <iostream.h> - уже устарело
          3. min, max давно есть в stl
            Цитата grustnoe @
            1. можно, если пользоваться export

            Только вот
            Цитата Vladimir @
            Visual C++ 6.0
            слыхом не слыхивала про это...
              Цитата Lucifer @
              А какой компилер про это слышал?

              Comeau 4.1, если верит Саттеру. И, как он пишет, на реализацию этого ключевого слова ушло около 3-х человеколет. И, как выяснилось, его использование только добавляет проблем, чем решает их. Подробности - в его "Новых задачах".
                Цитата Lucifer @
                неслабо

                Ага. И я про тоже. И все только для того, чтобы выяснить, что от применения export'а легче не становится. :huh:
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0250 ]   [ 16 queries used ]   [ Generated: 15.05.24, 05:22 GMT ]