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

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

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

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

18.01.2013, 23:41. Просмотров 1876. Ответов 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 получаю ошибку линковки вида "ссылка на неразрешенный символ". Почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 23:41     Раздельная компиляция и шаблоны
Посмотрите здесь:

C++ Шаблоны и раздельная компиляция
C++ Раздельная компиляция файлов в проекте. Межмодульное взаимодействие
C++ Первая раздельная компиляция. Подскажите ошибки.
Раздельная компиляция ошибка LNK2019 C++
C++ Раздельная компиляция
Раздельная компиляция файлов C++
раздельная компиляция C++
C++ Раздельная компиляция
Создание классов в С++. Раздельная компиляция C++
Раздельная компиляция C++
Раздельная компиляция ( Code blocks) C++
C++ Раздельная компиляция и шаблоны: как правильно использовать?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
6657 / 3848 / 508
Регистрация: 29.11.2010
Сообщений: 10,187
18.01.2013, 23:42     Раздельная компиляция и шаблоны #2
шаблонные функции необходимо реализовывать в одном файле
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
18.01.2013, 23:45  [ТС]     Раздельная компиляция и шаблоны #3
Цитата Сообщение от MrGluck Посмотреть сообщение
шаблонные функции необходимо реализовывать в одном файле
Спасибо, мне казалось, что можно делать и в нескольких.
kravam
быдлокодер
1690 / 877 / 44
Регистрация: 04.06.2008
Сообщений: 5,395
19.01.2013, 00:21     Раздельная компиляция и шаблоны #4
Наверное происходит очевидное. При раздельной компиляции компилятор на стадии линковки ищет функции
foo<int>::foo() и foo<int>::~foo(), а их нету.

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

Потому-то на стадии линковки эти функции и отсутствуют. Отсюда и ругань.
Yandex
Объявления
19.01.2013, 00:21     Раздельная компиляция и шаблоны
Ответ Создать тему
Опции темы

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