Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.233.62] |
|
Сообщ.
#1
,
|
|
|
Не могу понять причину, по которой программа не компилируется. Вот краткое введение в суть дела:
Главный файл 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) |
Сообщ.
#2
,
|
|
|
Определения шаблонных классов и функций нельзя разносить по *.h и *.cpp
Не знаю, работает ли явная специализация на VC6. Но она редко используется. |
Сообщ.
#3
,
|
|
|
Не ожидал получить столь быстрого ответа. Спасибо!
Т.е., если я правильно понял, шаблоны функций (и классов) могут обявляться в h-файле только вместе с их реализациями? |
Сообщ.
#4
,
|
|
|
1. можно, если пользоваться export
2. #include <iostream.h> - уже устарело 3. min, max давно есть в stl |
Сообщ.
#5
,
|
|
|
Цитата grustnoe @ 1. можно, если пользоваться export Только вот Цитата Vladimir @ слыхом не слыхивала про это... Visual C++ 6.0 |
Сообщ.
#6
,
|
|
|
Comeau 4.1, если верит Саттеру. И, как он пишет, на реализацию этого ключевого слова ушло около 3-х человеколет. И, как выяснилось, его использование только добавляет проблем, чем решает их. Подробности - в его "Новых задачах". |
Сообщ.
#7
,
|
|
|
Ага. И я про тоже. И все только для того, чтобы выяснить, что от применения export'а легче не становится. |