Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
1

Шаблон и возвращение булевых значений

27.12.2016, 17:23. Показов 1960. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

есть такой шаблон:
C++
1
2
3
4
5
6
7
8
template <typename T> T printResult(const char* message, bool pause, const T value)
{
    if (message[0] != '\0')
        cout << message << endl;
    if (pause)
        system("pause");
    return value;
}
Все работает, но когда передаю false/true вместо 3 аргумента - ошибка



как исправить?

Добавлено через 1 минуту
Error LNK1120 1 unresolved externals



Error LNK2019 unresolved external symbol "bool __cdecl printResult<bool>(char const *,bool,bool)" (??$printResult@_N@@YA_NPBD_N_N@Z) referenced in function "bool __cdecl SetData(struct ClientInfo *,unsigned int &,char const *,char const *,char const *,char const *,char const *)" (?SetData@@YA_NPAUClientInfo@@AAIPBD2222@Z) Module2
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2016, 17:23
Ответы с готовыми решениями:

Перебор всех значений трёх булевых переменных
Вобщем мне надо проверить функцию на тавтологию, для этого как я понимаю надо проверить чтобы...

Возможно ли возвращение функцией двух значений? Именно возвращение, не ссылка или указатель
Нужна функция в которую забиваешь два числа и сначала она возвращает минимальное, после...

Возвращение значений из функции
как вернуть кроме значения структуры еще и значение переменной а типа int? struct STROKA { string...

Возвращение трех значений
Как в функции возвратить три значения?

10
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2016, 17:24 2
В самой шаблонной функции ошибок нет, всё работает.
Ругается линкер на какое-то место, где эту функцию используют.
1
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
27.12.2016, 17:27  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool SetData(ClientInfo* pObj, size_t& recordsCount, const char* sz1, const char* sz2,
    const char* sz3, const char* sz4, const char* sz5)
{
    if (pObj == nullptr || sz1 == nullptr || sz2 == nullptr || sz3 == nullptr ||
        sz4 == nullptr || sz5 == nullptr)
        return printResult("Неверный указатель на объект.",false , true);
 
    ClientInfo& record = pObj[recordsCount];
 
    record.szUid = sz1;
    record.szName = sz2;
    record.szSurname = sz3;
    record.szDate = sz4;
    record.szMoney = sz5;
 
    ++recordsCount;
 
    return 0;
}
вот сама функция
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2016, 17:32 4
В данном вызове нет ошибок. А как располагаются данные функции в исходных файлах?
1
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
27.12.2016, 17:35  [ТС] 5
в разных файлах, но рядом в том же файле, где вызывается шаблон с bool, есть вызов с int и все работает
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2016, 17:41 6
Приведите описание расположения.
0
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
27.12.2016, 17:43  [ТС] 7
в файле Source.cpp находится сам шаблон
в Source.h его определение
C++
1
template <typename T> T printResult(const char* message, bool pause, const T value);
в ClientInfo.cpp функция SetData
в ClientInfo.h определение

оба .cpp имеют такие инклюды
C++
1
2
#include "ClientInfo.h"
#include "Source.h"
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2016, 17:45 8
Лучший ответ Сообщение было отмечено ChipChop как решение

Решение

Цитата Сообщение от ChipChop Посмотреть сообщение
в файле Source.cpp находится сам шаблон
в Source.h его определение
Определение шаблона должно быть полностью в header файле.
1
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
27.12.2016, 17:47  [ТС] 9
Цитата Сообщение от MrGluck Посмотреть сообщение
Определение шаблона должно быть полностью в header файле.
прямо с кодом?

Добавлено через 1 минуту
сработало...

а в чем прикол?
почему с другими типами работает, а бул - сломал все?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.12.2016, 18:00 10
Цитата Сообщение от ChipChop Посмотреть сообщение
а в чем прикол?
почему с другими типами работает, а бул - сломал все?
Это связано с инстанцированием шаблона.
Вы также можете явно написать специализацию для всех использумых типов в .cpp файле. С дублированием тела функции. Но думаю, что вы предпочтёте предыдущий вариант.
1
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
27.12.2016, 18:01  [ТС] 11
спасибо
0
27.12.2016, 18:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2016, 18:01
Помогаю со студенческими работами здесь

Возвращение из функций нескольких значений
Доброго времени суток. Нужна помощь. Дано задание: Напишите функцию swap(int&amp; a, int&amp; b, int&amp; c),...

Возвращение и вывод вычисленных значений в классах
Пишу программу для вычисления корней уравнений и наткнулся на небольшую проблемку. есть класс head...

Возвращение двух значений через ссылку и return
При выполнении программы функция возвращает количество и сумму чисел, находящихся между первым и...

Шаблон функции для подсчета значений в массиве
Всем доброго времени суток. Очень прошу помочь написать программу. Нужно создать шаблон функции...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru