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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Односвязный список(помогите немного исправить) http://www.cyberforum.ru/cpp-beginners/thread543250.html
Задание: из списка удалить элементы меньше заданного. Наваял что-то, но нифига не получается) #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <iostream> #include <cstdlib> #define N 10
C++ Редактор многомерных динамических массивов !!! Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. !!! Помогите мне пожалуйста написать следующую "задачу", заранее большое спасибо! Условие: Создать проект, содержащий двумерный динамический массив, заполненный случайными числами. Высота и длина массива вводятся с клавиатуры. Реализовать 4 функции, каждая из которых принимает указатель на... http://www.cyberforum.ru/cpp-beginners/thread543227.html
Использование set C++
Приветствую. Что-то я совсем глупый вопрос задам, но понять, где тут ошибка никак не могу: #include <iostream> #include <vector> #include <set> #include <utility> typedef std::set <std::pair <std::string, std::string> > myData;
C++ Архиваторы
Доброго всем дня. Может ли кто-нибудь посоветовать простые программы по созданию архиватора? Обыскала чуть ли не весь интернет, но ничего нормального не нашла. В программировании не разбераюсь, а потому помощи прошу у вас) Заранее благодарю.
C++ создание классов http://www.cyberforum.ru/cpp-beginners/thread543205.html
создать класс который осуществляет вывод на экран таблицы умножения с++
C++ Составить массив B так, чтобы элементы массива A[0..6, 0..6] следовали в нем в последовательности диагоналей параллельно побочной диагонали Дали лабораторную работу по информатике Задание: Составить массив В так, чтобы элементы массива A следовали в нем в последовательности диагоналей параллельно побочной диагонали и начинались с a, a, a... Помогите! Двумерный массив создаю, а дальше не знаю как. #include <stdio.h> #define N 7 #define M 7 #define N_MAX 50 #define N_MIN 1 int main(void) { подробнее

Показать сообщение отдельно
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 03:46     использование шаблонов
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
 
Текущее время: 19:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru