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

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

Войти
Регистрация
Восстановить пароль
 
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,586
Записей в блоге: 12
#1

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

07.05.2014, 22:31. Просмотров 244. Ответов 3
Метки нет (Все метки)

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 перед функцией не хватает.
можете объяснить разницу между статик функцией и обычной функцией в классе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2014, 22:31     Remove_if - при передаче функции класса выдает ошибки
Посмотрите здесь:

C++ Ошибка при передаче в скрытый параметр класса.
C++ При компиляции программы в dev C++ выдает ошибки
При вынесении кода в отдельную функцию выдает ошибки C++
Ошибки при наследовании класса от вектора C++
C++ Ошибки при наследовании класса
Ошибка при передаче результата функции C++
При передаче указателя в качестве аргумента функции теряется значение C++
C++ Ошибки преобразования при передаче указателя на функцию
При описании класса String компилятор выдает непонятные сообщения об ошибках C++
C++ CodeBlocks выдает непонятные ошибки при компиляции
Выдает ошибку при передаче массива в функцию C++
Компилятор выдает три ошибки, при попытке скомпилировать программу C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12535 / 7097 / 797
Регистрация: 27.09.2012
Сообщений: 17,510
Записей в блоге: 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
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2014, 23:08     Remove_if - при передаче функции класса выдает ошибки #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Van111 Посмотреть сообщение
можете объяснить разницу между статик функцией и обычной функцией в классе?
Статическая функция не получает неявного параметра this, который указывает на объект класса, для которого вызывается функция. Т.о. функция-член без параметров фактически получает один скрытый параметр - указатель на объект. Этим она и отличается от свободной функции без параметров.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12535 / 7097 / 797
Регистрация: 27.09.2012
Сообщений: 17,510
Записей в блоге: 2
Завершенные тесты: 1
07.05.2014, 23:14     Remove_if - при передаче функции класса выдает ошибки #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ну и в дополнение к ответу Tulosba, наверное стоит сказать, что static функции работают только со статическими функциями и данными, т.к. им не передается указатель на объект с которым работать, а к не статическим данным без объекта не обратиться
Yandex
Объявления
07.05.2014, 23:14     Remove_if - при передаче функции класса выдает ошибки
Ответ Создать тему
Опции темы

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