Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
#1

Раздельная компиляция и шаблоны - C++

18.01.2013, 23:41. Просмотров 2125. Ответов 3
Метки нет (Все метки)

Есть 3 файла с кодом:
1) foo.hpp
C++
1
2
3
4
5
6
7
8
template<typename T>
class foo
{
public:
    T bar;
    foo();
    ~foo();
};
2) foo.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include "foo.hpp"
 
template<typename T>
foo<T>::foo()
{
}
 
template<typename T>
foo<T>::~foo()
{
}
3) main.cpp
C++
1
2
3
4
5
6
7
#include "foo.hpp"
 
int main()
{
    foo<int> x;
    return 0;
}

И в VS и в GCC получаю ошибку линковки вида "ссылка на неразрешенный символ". Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Раздельная компиляция и шаблоны (C++):

Шаблоны и раздельная компиляция - C++
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ... public: bool inc();

Раздельная компиляция и шаблоны: как правильно использовать? - C++
Столкнулся с очень неприятной ситуацией, когда один и тот же код не работает, если класс разделить по файлам. #include &lt;iostream&gt; ...

Раздельная компиляция - C++
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У меня в проекте такие файлы: ...

Раздельная компиляция - C++
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс,...

Раздельная компиляция - C++
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл: содержит некоторые функции Также есть...

раздельная компиляция - C++
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и функцию main. Как, корректно, выполнить...

3
MrGluck
Модератор
Эксперт CЭксперт С++
7490 / 4605 / 691
Регистрация: 29.11.2010
Сообщений: 12,589
18.01.2013, 23:42 #2
шаблонные функции необходимо реализовывать в одном файле
1
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
18.01.2013, 23:45  [ТС] #3
Цитата Сообщение от MrGluck Посмотреть сообщение
шаблонные функции необходимо реализовывать в одном файле
Спасибо, мне казалось, что можно делать и в нескольких.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
19.01.2013, 00:21 #4
Наверное происходит очевидное. При раздельной компиляции компилятор на стадии линковки ищет функции
foo<int>::foo() и foo<int>::~foo(), а их нету.

Они, видать лепятся не на стадии линковки, а на стадии собственно компиляции (стадия N2 процесса компиляции). А на этой стадии (N2) они не сделались, ибо неизвестно было, какой тип будет использован. А известен он стал только во время линковки.

Потому-то на стадии линковки эти функции и отсутствуют. Отсюда и ругань.
1
19.01.2013, 00:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 00:21
Привет! Вот еще темы с ответами:

Раздельная компиляция файлов - C++
Если класс определен в раздельных файлах и изменения сделаны в части main программы, кот использует класс - какой файл необходимо...

Раздельная компиляция ошибка LNK2019 - C++
Создал Header file #ifndef prata_9_1_H_ #define prata_9_1_H_ struct XY { int i_x; // distance from origin int i_y; // direction...

Раздельная компиляция шаблонов классов - C++
При разделении шаблона класса на .h и .cpp линковщик ругается. Неужели в C++17 ещё не пофиксили это недоразумение и придётся писать всё в...

Создание классов в С++. Раздельная компиляция - C++
При создании класса C++ в VS создается два файла, &quot;&lt;имя_класса&gt;.h&quot; и &quot;&lt;имя_класса&gt;.cpp&quot;, зачем они ? В каком сам класс писать? Простите за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru