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

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

Войти
Регистрация
Восстановить пароль
 
Mr. Hat
2 / 2 / 0
Регистрация: 17.02.2012
Сообщений: 63
#1

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

29.12.2013, 09:27. Просмотров 199. Ответов 3
Метки нет (Все метки)

Ситуация примерно такая. Есть файл 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++ не понимаю принцип работы кода
Двухсвязный список (разбиение кода на файлы) C++
Разобрать логику работы приведенного кода C++
Бинарный поиск через рекурсию: разобрать логику кода C++
C++ Не понимаю часть кода
C++ Определение количества слов и букв, введенных пользователем (не понимаю логику программы)
Фрагмент кода обработки двумерного массива переделать под одномерный массив C++
Разделение кода на cpp и h файлы C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12507 / 7069 / 794
Регистрация: 27.09.2012
Сообщений: 17,454
Записей в блоге: 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
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12507 / 7069 / 794
Регистрация: 27.09.2012
Сообщений: 17,454
Записей в блоге: 2
Завершенные тесты: 1
29.12.2013, 09:40     Не понимаю логику обработки кода, разбитого на файлы #4
Цитата Сообщение от Mr. Hat Посмотреть сообщение
И шаблонные функции вообще нет смысла включать в заголовочные файлы?
всю реализацию пишите в заголовочном файле.
Yandex
Объявления
29.12.2013, 09:40     Не понимаю логику обработки кода, разбитого на файлы
Ответ Создать тему
Опции темы

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