Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: [C++] передача функции как параметра [Решено]  (Прочитано 4474 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ZwS

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Возник следующий вопрос. Есть некий класс. При создании нового объекта этого класса конструктор принимает ряд параметров, в том числе и функцию. Могу ли я присвоить передаваемую функцию другой функции в этом объекте?
typedef void (*funct)();

class TestClass
{
  public:
   TestClass(funct);
  private:
   void ownFunct();
};

TestClass::TestClass(funct) { ownFunct = funct }; //правильно ли такое присвоение?

void Funct1() { ... }
void Funct2() { ... }
void Funct3() { ... }

int main()
{
  TestClass TestObj1(Funct1);
  TestClass TestObj2(Funct2);
  TestClass TestObj3(Funct3);
  return 0;
}
« Последнее редактирование: 06 Ноября 2010, 17:21:19 от ZwS »
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: [C++] передача функции как параметра
« Ответ #1 : 06 Ноября 2010, 16:02:56 »
Как-то так:
typedef void (*funct)();

class TestClass
{
  public:
   TestClass(funct);
  private:
   funct ownFunct;
};

TestClass::TestClass(funct f) { ownFunct = f; }

void Funct1() {}
void Funct2() {}
void Funct3() {}

int main()
{
  TestClass TestObj1(Funct1);
  TestClass TestObj2(Funct2);
  TestClass TestObj3(Funct3);
  return 0;
}
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн ZwS

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: [C++] передача функции как параметра
« Ответ #2 : 06 Ноября 2010, 16:45:04 »
не работает такое присвоение. компилятор на строке с присвоением выдает следующее:
error: invalid use of member (did you forget the ‘&’ ?)гуглю по ошибке. нахожу что она происходит изза того что забыты скобки. правлю присвоение на
TestClass::TestClass(funct f) { ownFunct() = f(); }и получаю
error: invalid use of ‘void’
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

Оффлайн Kwah

  • Старожил
  • *
  • Сообщений: 1442
  • Ubuntu 17.10
    • Просмотр профиля
Re: [C++] передача функции как параметра
« Ответ #3 : 06 Ноября 2010, 16:59:22 »
Какой компилятор?
(Нажмите, чтобы показать/скрыть)

Пример выше
(Нажмите, чтобы показать/скрыть)

Собирает на ура
$ ./a.out
Funct1
Funct2
Funct3

Оффлайн ZwS

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1674
    • Просмотр профиля
Re: [C++] передача функции как параметра [Решено]
« Ответ #4 : 06 Ноября 2010, 17:19:43 »
Разобрался. По своей невнимательности сделал пару ошибок. Все работает отлично, спасибо.
Dell Inspiron One 2330 | Intel+Radeon HD7650A | 8GB RAM | Ubuntu GNOME 17.10

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.