С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Односвязный список(помогите немного исправить) http://www.cyberforum.ru/cpp-beginners/thread543250.html
Задание: из списка удалить элементы меньше заданного. Наваял что-то, но нифига не получается) #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <iostream> #include...
C++ Редактор многомерных динамических массивов !!! Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. !!! Помогите мне пожалуйста написать следующую "задачу", заранее большое спасибо! Условие: ... http://www.cyberforum.ru/cpp-beginners/thread543227.html
Использование set C++
Приветствую. Что-то я совсем глупый вопрос задам, но понять, где тут ошибка никак не могу: #include <iostream> #include <vector> #include <set> #include <utility> typedef std::set...
C++ Архиваторы
Доброго всем дня. Может ли кто-нибудь посоветовать простые программы по созданию архиватора? Обыскала чуть ли не весь интернет, но ничего нормального не нашла. В программировании не разбераюсь, а...
C++ создание классов http://www.cyberforum.ru/cpp-beginners/thread543205.html
создать класс который осуществляет вывод на экран таблицы умножения с++
C++ Составить массив B так, чтобы элементы массива A[0..6, 0..6] следовали в нем в последовательности диагоналей параллельно побочной диагонали Дали лабораторную работу по информатике Задание: Составить массив В так, чтобы элементы массива A следовали в нем в последовательности диагоналей параллельно побочной диагонали и начинались с a, a,... подробнее
IPtv
8 / 8 / 5
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 03:46 0

использование шаблонов

10.04.2012, 03:46. Просмотров 672. Ответов 2
Метки (Все метки)

Ответ

1. подключить определение шаблона к той единице компиляции, где он используется. то есть добавить в main.cpp:
C++
1
#include "inp.cpp"

2. экспортировать шаблон:
C++
1
2
3
4
5
6
7
8
9
10
#ifndef _INPUT_H_
#define _INPUT_H_
 
#include <iostream>
#include <vector>
using namespace std;
 
export template <class T>
void input (vector<T>& arr);
#endif
но на вашем компиляторе (vs2005/8/10) не прокатит, т.к. ключевое слово export не реализовано


3. инстанцировать шаблон ручками:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "inp.h"
#include <vector>
#include <iostream>
using namespace std;
 
template <class T>
void input (vector<T>& arr)
{
 T x = 0;
 int i;
 while (cin >> x)
  {
    if (i == arr.size())
      arr.resize = ((arr.size() * 2) + 1);
    arr[i++] = x;
  }
 arr.resize(i);
}
 
template void input<vector<int> >(vector<int>&);
из минусов: данный способ - отличная возможность прострелить себе ногу(с), так что использовать его надо с умом.





причина ошибки:
компиляция в общем виде происходит следующим макаром.
1. main.cpp - компилятор находит шаблонную функцию input но не может её инстанцировать, т.к. тупо "не видит" тела функции, полагая, что где-нибудь оно есть, оставляет заглушку полагаясь на совесть линковщика, мол он найдёт необходимое в других единицах компиляции и подставит вызов на место заглушки.
2. inp.cpp - компилятор видит шаблон функции, но тут он не знает, что в main.cpp необходим вызов её с шаблонным параметром int, следовательно шаблон остаётся не инстанцированным
3. линковщик находит заглушку но не находит чем её заткнуть, делаеть ему нечего кроме как поругать пользователя:
inputTempl.obj : error LNK2019: unresolved external symbol "void __cdecl input<int>(class std::vector<int,class std::allocator<int> > &)" (??$input@H@@YAXAAV?$vector@HV?$allocator@H@std@@@std@@@Z) referenced in function _main

Вернуться к обсуждению:
использование шаблонов
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2012, 03:46
Готовые ответы и решения:

С++ использование шаблонов
Приветствую всех на форуме. Написал код с использованием шаблонов. Задание...

Использование шаблонов
Здравствуйте, пытаюсь набросать элементарный пример шаблона в Visual Studio 12...

Задача на использование шаблонов
Здравствуйте, ребята! Помогите, пожалуйста с задачкой на C++. Вот само задание:...

Использование функций шаблонов
Использование функций шаблонов: для работы с двумерными массивами...

использование функций-шаблонов
для работы с двумерными массивами арифметических типов данных разработать...

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