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

Remove_if - при передаче функции класса выдает ошибки - C++

Восстановить пароль Регистрация
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
07.05.2014, 22:31     Remove_if - при передаче функции класса выдает ошибки #1
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
#include <QCoreApplication>
#include <vector>
using namespace std;
template <class T>
class c_equ
{
protected:
   T equ;
public:
   c_equ(int new_val)
   {
       equ = new_val;
   }
   bool func(int val)
   {
       return val > equ ? true : false;
   }
};
bool is_odd(int i)
{
  return (i % 2) != 0;
}
int main(int argc, char *argv[])
{
    vector <int> v;
    v.push_back(3);
    v.push_back(5);
    v.push_back(1);
    v.push_back(4);
    c_equ<int>  equ(2);
    v.erase( remove_if( v.begin(), v.end(), equ.func ), v.end() );
    QCoreApplication a(argc, argv);
 
    return a.exec();
}
поставил qt, попробовал remove_if передать функцию класса, выдаёт ошибки. почему компилятор не скушал это ?

Добавлено через 7 минут
разобрался, static перед функцией не хватает.
можете объяснить разницу между статик функцией и обычной функцией в классе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.05.2014, 22:54     Remove_if - при передаче функции класса выдает ошибки #2
1) #include <algorithm>
2) func - это функция-член класса
3) remove_if ничего не знает о Вашем объекте

Добавлено через 20 минут
В принципе можно забиндить как-то так:
C++
1
v.erase( remove_if( v.begin(), v.end(), std::bind1st ( std::mem_fn ( &c_equ<int>::func ) , &equ ) ) , v.end() ) ;
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2014, 23:08     Remove_if - при передаче функции класса выдает ошибки #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Van111 Посмотреть сообщение
можете объяснить разницу между статик функцией и обычной функцией в классе?
Статическая функция не получает неявного параметра this, который указывает на объект класса, для которого вызывается функция. Т.о. функция-член без параметров фактически получает один скрытый параметр - указатель на объект. Этим она и отличается от свободной функции без параметров.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
07.05.2014, 23:14     Remove_if - при передаче функции класса выдает ошибки #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ну и в дополнение к ответу Tulosba, наверное стоит сказать, что static функции работают только со статическими функциями и данными, т.к. им не передается указатель на объект с которым работать, а к не статическим данным без объекта не обратиться
Yandex
Объявления
07.05.2014, 23:14     Remove_if - при передаче функции класса выдает ошибки
Ответ Создать тему
Опции темы

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