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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
#1

STL вызов метода класса - C++

16.04.2013, 20:41. Просмотров 605. Ответов 11
Метки нет (Все метки)

Доброго времени суток! У меня есть класс, в нем поле вектор пар, я хочу реализовать метод вывода этого вектора внутри класса, но что-то не получается... Буду благодарен за помощь)

Вот собственно часть кода:

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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
class Arithmetic{
    private:
        vector<pair<char, int> > coll;
 
    public:
        Arithmetic(string _str){
            for(unsigned i = 0; i < _str.size(); ++i)
                coll.push_back(make_pair(_str[i], 0));
        }
                
                void print(pair<char, int> op){
                    cout << op.first << ": " << op.second << endl;
                }
 
        void get_operation(){
            for_each(coll.begin(), coll.end(), print);
        }
};
выдает ошибку, но подсказки компилятора толку не дали, буду благодарен за помощь и если можно ткнуть носом в корень проблемы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2013, 20:41     STL вызов метода класса
Посмотрите здесь:

Вызов метода класса из метода другого класса - C++
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd, bufwr; unsigned char tx_index,...

Вызов метода класса из DLL - C++
Добрый вечер. Имеется длл, в которой есть: 1. Класс, содержащий метод 2. Функция, возвращающая объект этого класса Если п.2...

Вызов метода другого класса - C++
#include&lt;iostream&gt; using namespace std; class A { public: void Show() { cout &lt;&lt; &quot;A&quot; &lt;&lt; endl; }; }; class B { ...

Вызов метода родительского класса - C++
Всем доброго вечера! Читаю Р. Лафоре. Он пишет: Т.е. исходя из этого, можно предположить, что производный класс имеет...

Вызов метода класса из main - C++
Как вызвать функцию plus в меин? пробовал вариант р3.=р3.plus(p1,p2), но не получилось #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Вызов метода у наследников абстрактного класса - C++
Добрый вечер. Разбираюсь с паттерном проектирования &quot;Декоратор&quot;. Имеется код: #include &lt;string&gt; #include &lt;iostream&gt; #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
16.04.2013, 20:50     STL вызов метода класса #2
По-моему тут нужно использовать адаптер указателя на функцию ptr_fun. Ведь STL заточена под функциональный объекты. Еще лучше сделать функцию print статической
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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
class Arithmetic{
    private:
        vector<pair<char, int> > coll;
 
    public:
        Arithmetic(string _str){
            for(unsigned i = 0; i < _str.size(); ++i)
                coll.push_back(make_pair(_str[i], 0));
        }
 
                static
                void print(pair<char, int> op){
                    cout << op.first << ": " << op.second << endl;
                }
 
        void get_operation(){
            for_each(coll.begin(), coll.end(), std::ptr_fun(Arithmetic::print));
        }
};
 
int main()
{
   return 0;
}
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
16.04.2013, 20:55  [ТС]     STL вызов метода класса #3
Buckstabue, спасибо, пробовал использовать адаптеры, но без статик не работало, в почему без статик не работало?
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
16.04.2013, 21:00     STL вызов метода класса #4
yoghurt92, а фиг его знает. Формат вызова метода в C++ имеет вид "объект.имя_метода(аргументы)", а STL внутри функции for_each генерирует что-то другое, не в этом формате
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.04.2013, 21:01     STL вызов метода класса #5
Цитата Сообщение от yoghurt92 Посмотреть сообщение
в почему без статик не работало?
потому что нельзя вызвать метод без объекта
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
16.04.2013, 21:02  [ТС]     STL вызов метода класса #6
Buckstabue, да недавно начал STL еще не все уложилось, но смотри, у меня есть еще метод, и фишка со статик не проходит

C++
1
2
3
4
5
6
7
8
9
void oper(char elem){
            for(unsigned j = 0; j < coll.size(); ++j)
                    if(elem == coll[j].first)
                        ++coll[j].second;
        }
 
        void operation(string _str){
            for_each(_str.begin(), _str.end(), ptr_fun(Arithmetic::oper));
        }
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
16.04.2013, 21:10     STL вызов метода класса #7
yoghurt92, конечно у тебя это не будет компилиться У статических методов нет доступа к внутренним полям объекта, этим методам не передается указатель this, но можно сделать один финт. Очень плохой финт, не стоит так делать
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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
class Arithmetic{
    private:
        vector<pair<char, int> > coll;
 
    public:
        Arithmetic(string _str){
            for(unsigned i = 0; i < _str.size(); ++i)
               coll.push_back(make_pair(_str[i], 0));
        }
 
 
        static
        void oper(Arithmetic& obj, char elem){
           for(unsigned j = 0; j < obj.coll.size(); ++j)
              if(elem == obj.coll[j].first)
                 ++obj.coll[j].second;
        }
 
        void operation(string _str){
           for_each(_str.begin(), _str.end(), bind1st(ptr_fun(Arithmetic::oper), *this));
        }
};
 
int main()
{
   return 0;
}
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
16.04.2013, 21:14  [ТС]     STL вызов метода класса #8
Buckstabue, а как тогда быть?
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
16.04.2013, 21:22     STL вызов метода класса #9
yoghurt92, не знаю, зависит от ситуации. Либо вручную обходить коллекцию и вызывать для нее метод, либо создавать нормальный функциональный объект. Я сам в этом не очень опытен. Но в твоем коде, я не вижу безвыходной ситуации. Я считаю, не надо подстраивать свой код под STL, а использовать STL только там, где это удобно
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.04.2013, 21:29     STL вызов метода класса #10
c++11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Arithmetic{
    private:
        typedef vector<pair<char, int> > MyVec;
        vector<pair<char, int> > coll;
 
    public:
        Arithmetic(const string& _str){
            for(string::size_type i = 0; i < _str.size(); ++i)
               coll.push_back(make_pair(_str[i], 0));
        }
 
 
        
        void oper(char elem){
           for(MyVec::size_type j = 0; j < coll.size(); ++j)
              if(elem == coll[j].first)
                 ++coll[j].second;
        }
 
        void operation(const string& _str){
             for_each(_str.begin(), _str.end(), std::bind(&Arithmetic::oper, this, std::placeholders::_1));
        }
};
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
16.04.2013, 21:57  [ТС]     STL вызов метода класса #11
ну я думаю тогда лучше уже просто сделать функции без класса, все работает если сделать функциями

Добавлено через 31 секунду
Jupiter, а можно объяснить 3 аргумент в for_each
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2013, 22:19     STL вызов метода класса
Еще ссылки по теме:

Вызов статического метода из другого класса - C++
Добрый день. Есть MAIN.cpp: STDMETHODIMP CMAIN::Function1(VARIANT Data,BYTE* pBuff) { .......... return x; } И...

Вызов виртуального метода класса наследника из вектора - C++
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class A { public: virtual void print() { cout &lt;&lt; &quot;A&quot; &lt;&lt;...

Вызов метода класса через указатель на ноль - C++
Почему в таком коде не происходит ошибка при вызове метода класса, а уже только в самом методе: struct A { int a; void...

Вызов метода класса, расположенного в другом файле - C++
У нас есть 2 файла -&gt;Sourse.cpp and Sourse.h /*Sourse.cpp*/ #include &quot;C:\Users\USER\Desktop\define.h&quot; int main() { ...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.04.2013, 22:19     STL вызов метода класса #12
http://blog.think-async.com/2010/04/...lustrated.html
для тех у кого слабый английский - хватит и картинок
Yandex
Объявления
16.04.2013, 22:19     STL вызов метода класса
Ответ Создать тему
Опции темы

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