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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
#1

Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. - C++

08.07.2009, 10:49. Просмотров 1332. Ответов 6
Метки нет (Все метки)

Добрый день. Начал изучать шаблоны и сразу же возникло 2 проблемы:

1).На Строке в мейне SArr<short> ar1(100);
Выдается ошибка undefined reference to `SArr<short>::SArr(short)'
Причем, если подключить в мейне “SArr.cpp” то ошибка исчезает.

2)В SArr.h MyVect::iterator it; требует “;” после iterator. Если убрать it то компилятор конечно затыкается но результат явно получится для меня бесполезный.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//--------------main.cpp
#include <iostream>
#include "SArr.h"
 
using namespace std;
 
int main()
{
   // SArr<short> ar1(100);//1я проблема
 
   
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//-----------------------------------SArr.cpp----------------------------
#include <iostream>
#include "SArr.h"
#include <vector>
 
using namespace std;
 
template <class Type>
SArr<Type>::SArr(Type num)
{
//for (long i=0;i!=num;i++) {v.push_back(0);cout<<i<<" ";}
 
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//-------SArr.h-------------------------------
#ifndef SARR_H_INCLUDED
#define SARR_H_INCLUDED
 
#include<vector>
#include <iostream>
 
using namespace std;
 
template <class Type>
class SArr
{
public:
//---------------construct-destruct---------
    SArr(Type num);
//-------------------operators--------------
//Type& operator[](const long);
//-------------------methods----------------
 
private:
typedef vector<Type> MyVect;
MyVect v;
//MyVect::iterator it; //---------2я проблема--------------------------
 
};
#endif // SARR_H_INCLUDED
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2009, 10:49     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора.
Посмотрите здесь:

Конструктор с параметрами C++
не отображается конструктор с параметрами C++
C++ конструктор с параметрами
Конструктор с параметрами Visual C++
Конструктор по умолчанию + объявление функции C++
Никогда не использовать конструктор с параметрами? C++
C++ Объявление функции с необязательными параметрами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
08.07.2009, 11:13     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. #2
Решение первой твоей проблемы:
Sarr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef SARR_H_INCLUDED
#define SARR_H_INCLUDED
 
#include<vector>
#include <iostream>
 
using namespace std;
 
template <class Type>
class SArr
{
    Type a;
public:
//---------------construct-destruct---------
    SArr(Type num):a(num){};
//-------------------operators--------------
//Type& operator[](const long);
//-------------------methods----------------
 
private:
typedef vector<Type> MyVect;
MyVect v;
//MyVect::iterator it; //---------2я проблема--------------------------
 
};
#endif // SARR_H_INCLUDED
И
main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "stdafx.h"
#include <stdio.h>
#include<iostream>
#include <conio.h>
#include "SArr.h"
using namespace std;
 
int main()
{
    SArr<short> ar1(100);//1я проблема
   return 0;
}
hockfan
7 / 7 / 0
Регистрация: 08.07.2009
Сообщений: 13
08.07.2009, 11:38     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. #3
а для чего такой "класс обертка" вокруг вектора? По сути код не правильный в общем на мой взгляд. Если понять задачу может смогу помочь нормально.
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
08.07.2009, 12:12  [ТС]     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. #4
Просто практикуюсь. Решил написать обертку для векторов, чтоб по синтаксису выглядело как обычные массивы. Там по идее в конструкторе вместо Type num, short num должно быть. Если не трудно заодно скажи, по каким причинам ты считашь ее неправильной.

Sekt я уже встречал такую форму записи и так и не понял для чего тут инициализатор. Не трудно объяснить? Я предполагал, что они для константных объектов только используются. Кроме того проблема остается. Если Тело конструктора написать в .h файле он будет работать и без :a(num). А Если инициализатор писать в SArr.cpp то ошибка та же будет выдаваться. А я бы не хотел писать в.h файле, что либо кроме прототипов.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
08.07.2009, 14:24     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. #5
C++
1
  SArr<short> ar1(100);//1я проблема
Еще можно как <template Type,int a=100>
и потом вставить переменную куда нужно.
А Других вариантов я не знаю как запустить шаблоный конструктор с параметром.
ISergey
Maniac
Эксперт С++
1346 / 879 / 51
Регистрация: 02.01.2009
Сообщений: 2,643
Записей в блоге: 1
08.07.2009, 16:23     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. #6
Цитата Сообщение от Atrus Посмотреть сообщение
А Если инициализатор писать в SArr.cpp то ошибка та же будет выдаваться. А я бы не хотел писать в.h файле, что либо кроме прототипов.
По другому ни как.. Нельзя отделять описание шаблона от реализации..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2009, 12:12     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора.
Еще ссылки по теме:

Конструктор и декструктор, явное и неявное объявление C++
C++ Как сделать конструктор и деструктор с параметрами?
Конструктор с параметрами C++
C++ Конструктор с параметрами по умолчанию
C++ Объявление итератора и его использование

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

Или воспользуйтесь поиском по форуму:
Atrus
12 / 12 / 0
Регистрация: 08.07.2009
Сообщений: 45
09.07.2009, 12:12  [ТС]     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. #7
Ясно. Спасибо.
Yandex
Объявления
09.07.2009, 12:12     Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора.
Ответ Создать тему
Опции темы

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