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

Не понимаю логику обработки кода, разбитого на файлы - C++

Восстановить пароль Регистрация
 
Mr. Hat
2 / 2 / 0
Регистрация: 17.02.2012
Сообщений: 63
29.12.2013, 09:27     Не понимаю логику обработки кода, разбитого на файлы #1
Ситуация примерно такая. Есть файл file1.h, в котором объявлена функция:

C++
1
template<class T> T from_string(const std::string& s);
Ее определение находится в файле file2.cpp, который подключен к проекту (в QtCreator), но ни в каких инклудах не фигурирует. Классы из этих двух файлов в других частях проекта (в которые file1.h включен через цепочку инклудов) работают нормально, но если я пытаюсь использовать эту функцию (напрмер, для T = double), компилятор ее не пропускает:

error: undefined reference to 'double from_string<double>(std::string const&)'

Чтобы все работало, приходится в каждом файле, где используется эта функция, писать ее определение:
C++
1
2
3
4
5
6
7
template<class T> T from_string(const std::string& s)
{
    std::istringstream is(s);
    T t;
    if(!(is >> t)) return T();
    return t;
}
Как сделать так, чтобы определение было одно на весь проект?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2013, 09:27     Не понимаю логику обработки кода, разбитого на файлы
Посмотрите здесь:

C++ Правильно ли я понимаю работу этого кода?
C++ Есть некоторые строчки кода, которые я не понимаю
C++ Подскажите логику нескольких строк кода
не понимаю как открыть исходные файлы C++
C++ не понимаю принцип работы кода
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,877
Записей в блоге: 2
Завершенные тесты: 1
29.12.2013, 09:31     Не понимаю логику обработки кода, разбитого на файлы #2
Цитата Сообщение от Mr. Hat Посмотреть сообщение
Как сделать так, чтобы определение было одно на весь проект?
Реализация шаблона должна быть доступна в месте инстанцирования
Mr. Hat
2 / 2 / 0
Регистрация: 17.02.2012
Сообщений: 63
29.12.2013, 09:38  [ТС]     Не понимаю логику обработки кода, разбитого на файлы #3
Т.е. проблема в том, что это - шаблон? И шаблонные функции вообще нет смысла включать в заголовочные файлы?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11820 / 6799 / 769
Регистрация: 27.09.2012
Сообщений: 16,877
Записей в блоге: 2
Завершенные тесты: 1
29.12.2013, 09:40     Не понимаю логику обработки кода, разбитого на файлы #4
Цитата Сообщение от Mr. Hat Посмотреть сообщение
И шаблонные функции вообще нет смысла включать в заголовочные файлы?
всю реализацию пишите в заголовочном файле.
Yandex
Объявления
29.12.2013, 09:40     Не понимаю логику обработки кода, разбитого на файлы
Ответ Создать тему
Опции темы

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