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

STL std::set, std::pair, std::make_pair - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как написать макрос - модуль числа... http://www.cyberforum.ru/cpp-beginners/thread157244.html
Помогите написать макрос на с++, возвращающий модуль числа... Добавлено через 4 минуты Нашёл..
C++ Изменение значения статической переменной не дает =\ static char text; text = ""; error: expression must be a modifiable lvalue это же не конст, а просто статик, в pawn"е часто пользовался static и ок всё было http://www.cyberforum.ru/cpp-beginners/thread157228.html
Часы в псевдографике C++
доброго времени суток. задание заключается в написании программы, отображающую на экране текущее время в виде циферблата с секундной,минутной и часовой стрелками(разных цветов). и сохранять картинку в файле по желанию пользователя. заранее благодарен.
Модификация объекта string через ссылку и указатель C++
Создайте две функции: первая должна получать аргумент типа string*, вторая - srting&. Каждая функция должна изменять объект string своим способом. В функции main сопсно вызываем и выводим изменёные строки. #include <iostream> #include <string> void ukazatel(std::string* p) { }
C++ Определить в какой четверти будет больше всего точек из 10 введенных. http://www.cyberforum.ru/cpp-beginners/thread157138.html
Задание такое: Ввести 10 раз координат х, у и определить в какой четверти их будет больше всего. Вот мой код#include <stdafx.h> #include <cmath> #include <iostream> using namespace std; void main() { int I, II, III, IV, x, y, i; for (i=0; i<10; i++) { cout<<"Enter your coords:"<<endl;
C++ Уведомление об ошибке в функции... Есть функция которая в процессе выполнения получает значение t, если (t < 0) значения нет. Как уведомить об этом пользователя функции? Если сделать доп. функцию проверки, то вычисления будут проводится дважды... T3DPoint Ray_And_Plane_Intersection(TRay Ray, TPlane Plane) { float t =... подробнее

Показать сообщение отдельно
outoftime
║XLR8║
509 / 431 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
04.08.2010, 04:13  [ТС]
Теперь выбивает вот такое:
error C2662: 'test::tree::getAge' : cannot convert 'this' pointer from 'const test::tree' to 'test::tree &'
Код в полном обьеме.
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <set>
 
#define SQR(a) ( (a) * 1ll * (a) )
 
namespace test {
 
    ////////////////////////////////////////////////////////////////////////////////////
    //
    // Class Tree
    //
    ////////////////////////////////////////////////////////////////////////////////////
 
    class tree {
        double age, height;
        std::string name;
        static double incA, incH;
    public:
        tree(std::string);
        // исполнение действия расти, при котором на константы увеличиваются «высота» и «возраст»
        void Incrementation();
        // получение ...
        std::string getName();
        // изменение названия (прямое изменение поля класса недопустимо).
        void setName(std::string);
        // получение возраста дерева без возможности его изменения
        double getAge();
        // получение высоты дерева без возможности его изменения
        double getHeight();
        // копирование объектов
        tree operator = (const tree&);
        // сравнение объектов
        bool operator == (tree);
        bool operator > (tree);
        bool operator < (tree);
    };
 
    tree::tree(std::string Name = ""){
        this->incA = 1 / 12;
        this->incH = 0.24;
        this->name = Name;
    }
    void tree::Incrementation(){
        this->age += this->incA;
        this->height += this->incH;
    }
    std::string tree::getName(){
        return this->name;
    }
    void tree::setName(std::string val){
        this->name = val;
    }
    double tree::getAge(){
        return this->age;
    }
    double tree::getHeight(){
        return this->height;
    }
    tree tree::operator = (tree a) {
        this->name = a.getName();
        this->age = a.getAge();
        this->height = a.getHeight();
        return *this;
    }
    bool tree::operator == (tree a){
        return this->height == a.getHeight();
    }
    bool tree::operator > (tree a){
        return this->height > a.getHeight();
    }
    bool tree::operator < (tree a){
        return this->height < a.getHeight();
    }
 
    ////////////////////////////////////////////////////////////////////////////////////
    //
    // Class Forest
    //
    ////////////////////////////////////////////////////////////////////////////////////
 
    // Нужна для опредиления пользовательской сортировки используя STL
    bool sortFunc(tree *a, tree *b){
        return a->getName() > b->getName();
    }
 
    class forest {
        int x, y;
        std::set<std::pair<tree, std::pair<int, int> > > list;
    public:
        forest(int, int);
        // добавление по случайным координатам (генерируются классом)
        void addTree(std::string);
        // удаление деревьев
        void delTree(std::string);
        // получение количества деревьев в лесу
        int getTreesNumber();
        // получение отсортированного по названиям списка деревьев в виде указателей на объекты
        std::vector<tree*> getTreesList();
        // получение количества деревьев в круговой области с центром (x0,y0) и радиусом r
        int getTreesInCircle(int, int, int);
        // поиск дерева по заданному названию и возврат указателя на объект
        tree* getTreeByName(std::string);
    };
 
    forest::forest(int X, int Y){
        this->x = X;
        this->y = Y;
    }
    void forest::addTree(std::string Name){
        tree newTree(Name);
        std::pair<int, int> position = std::make_pair(rand()%this->x, rand()%this->y);
        std::pair<tree, std::pair<int, int> > newElement(newTree,position); //= std::make_pair<newTree, position>;
        this->list.insert(newElement);
    }
    void forest::delTree(std::string Name){
        bool was = 1;
        std::set<std::pair<tree, std::pair<int, int> > > :: iterator it;
        for (it = this->list.begin(); it != this->list.end(); ++it, (it == this->list.end() ? was = 0 : 0))
            if (it->first.getName() == Name) break;
        if (was) this->list.erase(it);
    }
    int forest::getTreesNumber(){
        return this->list.size();
    }
    std::vector<tree*> forest::getTreesList(){
        std::vector<tree*> res;
        std::set<std::pair<tree, std::pair<int, int> > > :: iterator it;
        for (it = this->list.begin(); it != this->list.end(); ++it)
            res.push_back(&(it->first));
        std::sort(res.begin(), res.end(), sortFunc);
        return res;
    }
    int forest::getTreesInCircle(int X, int Y, int R){
        int res = 0;
        std::set<std::pair<tree, std::pair<int, int> > > :: iterator it;
        for (it = this->list.begin(); it != this->list.end(); ++it)
            // проверка в целых числа, что-бы не терять точность, но при больщих размерах леса прийдется использовать даблы
            if ( SQR(it->second.first - X) + SQR(it->second.second - Y) <= SQR(R) ) ++res; 
        return res;
    }
    tree* forest::getTreeByName(std::string Name){
        std::set<std::pair<tree, std::pair<int, int> > > :: iterator it;
        for (it = this->list.begin(); it != this->list.end(); ++it)
            if (it->first.getName() == Name) return &(it->first);
        return 0;
    }
 
    // end namespace "test"
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru