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

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

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

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

07.05.2014, 22:31. Просмотров 262. Ответов 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++
Ругается на 59 строку: 2.cpp(59): error C2664: otn: невозможно преобразовать параметр 4 из &quot;double **&quot; в &quot;double&quot; Не существует...

Почему выдает ошибку при передаче по ссылке параметров? - C++
#include &lt;iostream&gt; /* run this program using the console pauser or add your own getch, system(&quot;pause&quot;) or input loop */ void...

Ошибки преобразования при передаче указателя на функцию - C++
Есть функция SQLITE_API int SQLITE_STDCALL sqlite3_exec( sqlite3*, /* An open database */ const...

Ошибка при передаче в скрытый параметр класса. - C++
В функции считываю из входного файла некоторые значения(x1,x2,y1,y2,alph,omeg,rad,POG,park и тп) с помощью файлового потока. Программа...

Ошибки C2280, E1776 при передаче экземпляра ostream в функцию - C++
Ошибки C2280, E1776. Учу С++ по книге Страуструпа и при работе с файлами появилась такая проблема. Как решить? //Source.cpp #include...

Ошибка при передаче результата функции - C++
Оператор + возвращает правильное значение (по крайней мере в конце его тела я вывожу полученный список, и все верно, он возвращает его по...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
07.05.2014, 22:54 #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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.05.2014, 23:08 #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Van111 Посмотреть сообщение
можете объяснить разницу между статик функцией и обычной функцией в классе?
Статическая функция не получает неявного параметра this, который указывает на объект класса, для которого вызывается функция. Т.о. функция-член без параметров фактически получает один скрытый параметр - указатель на объект. Этим она и отличается от свободной функции без параметров.
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,231
Записей в блоге: 3
Завершенные тесты: 1
07.05.2014, 23:14 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ну и в дополнение к ответу Tulosba, наверное стоит сказать, что static функции работают только со статическими функциями и данными, т.к. им не передается указатель на объект с которым работать, а к не статическим данным без объекта не обратиться
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2014, 23:14
Привет! Вот еще темы с ответами:

При передаче указателя в качестве аргумента функции теряется значение - C++
Добрый день. Есть простенькая задачка сделать связанный список. При этом создается первый эелемнт списка с нулевым указателем на...

CodeBlocks выдает непонятные ошибки при компиляции - C++
Подскажите как решить эту проблему?? ||=== Build file: &quot;no target&quot; in &quot;no project&quot; (compiler: unknown) ===| ||Warning: .drectve...

При компиляции программы в dev C++ выдает ошибки - C++
http://files.mail.ru/0JL3TJ

При вынесении кода в отдельную функцию выдает ошибки - C++
Здравствуйте, подскажите пожалуйсто где я тут что неправильно написал. Код работает если поставить его в маин, но вот как только я его...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2014, 23:14
Ответ Создать тему
Опции темы

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