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

Создание класса шаблона, ассоциативного массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Пишу консольную змейку, крашит при увеличении размера http://www.cyberforum.ru/cpp-beginners/thread1492984.html
Появилось желание сделать свою игру на С++, так как нужно начинать с простого, решил сделать простую змейку. Нашёл в интернете пример, и взялся его переписывать. Пока что убрал некоторые функции, оставил только управление и вывод на экран. Вот пример: # include <iostream> # include <windows.h> # include <time.h> # include <conio.h> using namespace std; int snake_size, dir_x, dir_y,...
C++ Найти площадь круга по длине окружности Вам предоставляется окружность круга. Найти площадь круга. Формат входных данных Ввод содержит положительное вещественное число l (0 <l ≤ 20000) Формат результата Значение должно быть дано с абсолютной или относительной погрешностью не более 10^-6. http://www.cyberforum.ru/cpp-beginners/thread1492972.html
Вычислить длину окружности и площадь круга C++
Вычислить длину окружности и площадь, заключенную в круге Формат входных данных Ввод содержит одно число R (0 ≤ R ≤ 10000) - радиус окружности. Формат результата Выход два числа - длина окружности и площадь, ограниченная окружностью радиуса R. Числа должны быть предоставлены с абсолютной или относительной погрешностью не более 10^-6.
C++ Найти площадь поверхности и объем куба, зная длину его ребра.
Мы знаем длину ребра куба. Найти лицевой области, общую площадь поверхности и объем куба. Формат входных данных Ввод содержит одну положительное целое число (0 <≤ 10000). Формат результата Выходные три целых числа, разделенных пробелами - площадь поверхности, общая площадь поверхности и объем куба. Примеры Входные данные Результат работы
C++ Периметр и площадь прямоугольного треугольника http://www.cyberforum.ru/cpp-beginners/thread1492928.html
Длина ног а и б прямоугольного треугольника даны. Найти его периметр и площадь Формат входных данных Ввод содержит два реальных положительных чисел (0 <а≤ 10^5) и В (0 <б ≤ 10^5) - ноги прямоугольного треугольника. Числа разделены одним пробелом. Формат результата Написать на выход два вещественных числа каждая в отдельной строке. Первое число периметр треугольника. Второй номер является...
C++ Поменять местами наибольшие элементы в верхней и нижней половинах матрицы В матрице A( n- строк, m- столбцов; n- четное) поменять местами наибольшие элементы в ее верхней и нижней половинах. Для поиска индексов наибольшего элемента в заданной части матрицы использовать подпрограмму. Не получается поменять местами элементы и вывести получившеюся матрицу #include <iostream> #include <cmath> #include <iomanip> подробнее

Показать сообщение отдельно
The New Guy
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 6

Создание класса шаблона, ассоциативного массива - C++

04.07.2015, 17:52. Просмотров 288. Ответов 2
Метки (Все метки)

При компиляции возникают проблемы следующего характера.
1. В конструкторе IContainer компилятор пишет waring: преобразование const double в int возможна потеря данных, а потом и вовсе error: не найден оператор принимающий правый операнд хотя std::map вроде как позволяет так обращаться к элементам

C++
1
2
3
4
IContainer<ElemType, IndexType>::IContainer(const ElemType & elem, const IndexType & index)
{
        arr[index]=elem;
}
2. В ф-ии GetElem несоответствие типов со знаком и без. строчка с return возвр. адреса локальной или временной переменной, тоже не ясно.

C++
1
2
3
4
5
6
7
const ElemType& IContainer<ElemType, IndexType>::GetElem(const IndexType & index)
{
    if(index>arr.size())
        std::cout<<"exception \n";
        throw ElemNotFound<IndexType> /*err */(index);
    return arr[index];
}
3. В PutElem преобразование const double в int возможна потеря

C++
1
2
3
4
void IContainer<ElemType, IndexType>::PutElem(const IndexType& index, const ElemType& elem)
{
    arr.at(index)=elem; //??
}
4. Последнее, самое сложное не могут состыковаться блоки throw и catch я после слова throw создаю объект и хочу передать его в блок catch по ссылке, но он туда не лезет ни в какую, пробовал как мне кажется по всякому уже.

C++
1
2
3
4
5
6
7
8
9
10
throw ElemNotFound<IndexType> /*err */(index);
...
try
    {
    std::cout<<blablabla.GetElem(7)<<"  "<<obj.GetElem(1);
    }
    catch(/*ElemNotFound<IndexType>::*/ElemNotFound & bg/*...*/)
    {
        std::cout<<"exeption";//bg.mesg();
    }

Весь код:

Кликните здесь для просмотра всего текста
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "stdafx.h"
#include <string>
#include <iostream>
#include <map>
 
template<class IndexType>
class ElemNotFound
{
private:
    IndexType value;
public:
    ElemNotFound(IndexType index):value(index){}
    void mesg();
};
template<class IndexType>
void ElemNotFound<IndexType>::mesg()
{
    std::cout<<"Element #"<<value<<" not found\n";
}
 
 
template <class ElemType, class IndexType> class IContainer
{
private:
    std::map<ElemType, IndexType> arr;
public:
    IContainer() {};
    IContainer(const ElemType & elem, const IndexType & index);
   virtual const ElemType& GetElem( const IndexType& index ) /*const throw ( ElemNotFound ) = 0*/;
   virtual void PutElem( const IndexType& index, const ElemType& elem ) /*throw () = 0*/;  //первый это номер элемента в массиве, второй сам элемент
};
template<class ElemType, class IndexType>
IContainer<ElemType, IndexType>::IContainer(const ElemType & elem, const IndexType & index)
{
        arr[index]=elem;
}
template<class ElemType, class IndexType>
void IContainer<ElemType, IndexType>::PutElem(const IndexType& index, const ElemType& elem)
{
    arr.at(index)=elem; //??
}
template<class ElemType, class IndexType>
const ElemType& IContainer<ElemType, IndexType>::GetElem(const IndexType & index)
{
    if(index>arr.size())
        std::cout<<"exception \n";
        throw ElemNotFound<IndexType> /*err */(index);
    return arr[index];
}
 
int main()
{
    IContainer<double, int> obj (5, 7);
    IContainer<std::string, int> blablabla("golden joe", 6);
    blablabla.PutElem(4, "duck");
    /*IContainer<double, std::string> c;
    c.PutElem("pi", 3.14);
    c.PutElem("e", 2.71);
    std::cout << c.GetElem("pi")<<"\n";*/
    try
    {
    std::cout<<blablabla.GetElem(7)<<"  "<<obj.GetElem(1);
    }
    catch(/*ElemNotFound<IndexType>::*/ElemNotFound & bg/*...*/)
    {
        std::cout<<"exeption";//bg.mesg();
    }
    return 0; 
}

Народ хочет разобраться что к чему, дело для нас новое, не освоенное! С СТЛ и Exception-ами сталкиваюсь впервые, строго не судите!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru