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

Указатели на функции-члены - C++

Восстановить пароль Регистрация
 
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
07.12.2010, 12:37     Указатели на функции-члены #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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
using namespace std;
class Mammal
{
public:
    Mammal():itsAge(1){}
    virtual ~Mammal(){}
    virtual void Speak() const = 0;
    virtual void Move() const = 0;
protected:
    int itsAge;
};
class Dog: public Mammal
{
public:
    void Speak() const {cout << "Woof!\n";}
    void Move() const {cout << "Walking to heel...\n";}
};
class Cat: public Mammal
{
public:
    void Speak() const{cout << "meow!\n";}
    void Move() const {cout << "slinking...\n";}
};
class Horse:  public Mammal
{
public:
    void Speak() const {cout << "Winnie!\n";}
    void Move() const {cout << "Galloping...\n";}
};
int main()
{
    void (Mammal::*pFunc)() const = 0;
    Mammal* ptr = 0;
    int Animal;
    int Method;
    bool fQuit = false;
    while (fQuit == false)
    {
        cout << "(0)Quit (1)dog (2)cat (3)horse: ";
        cin >> Animal;
        switch (Animal)
        {
        case 1: ptr = new Dog; break;
        case 2: ptr = new Cat; break;
        case 3: ptr = new Horse; break;
        default: fQuit = true; break;
        }
        if (fQuit == false)
        {
            cout << "(1)Speak (2)Move: ";
            cin >> Method;
            switch (Method)
            {
            case 1: pFunc = Mammal::Speak; break;
            default: pFunc = Mammal::Move; break;
            }
            (ptr -> *pFunc)();
            delete ptr;
        }
    }
    return 0;
}
При компиляции выдает ошибки:
Error 1 error C3867: 'Mammal::Speak': function call missing argument list; use '&Mammal::Speak' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 55 p982
Error 2 error C3867: 'Mammal::Move': function call missing argument list; use '&Mammal::Move' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 56 p982
Error 3 error C2059: syntax error : '*' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 58 p982
Error 4 error C2039: 'ptr' : is not a member of 'Mammal' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 59 p982
Error 5 error C2541: 'delete' : cannot delete objects that are not pointers c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 59 p982

Эту тему еще только начали проходить, поэтому сижу, туплю, подскажите пожалуйста в чем ошибки.
Заранее огромное спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2010, 12:37     Указатели на функции-члены
Посмотрите здесь:

Указатели на функции-члены C++
Указатели на виртуальные функции-члены C++
класс «Строка» (данные-члены класса – строчка, функции-члены класса – операции) C++
C++ Константные функции-члены ?
C++ Статические члены и функции
C++ функции-члены, что это?
Константные функции-члены C++
Указатели на члены класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
07.12.2010, 12:51     Указатели на функции-члены #2
Цитата Сообщение от isaak Посмотреть сообщение
Error 1 error C3867: 'Mammal::Speak': function call missing argument list; use '&Mammal::Speak' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 55 p982
Error 2 error C3867: 'Mammal::Move': function call missing argument list; use '&Mammal::Move' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p982\p982\p982.cpp 56 p982
Компилятор просит Вас вместо

Цитата Сообщение от isaak Посмотреть сообщение
C++
1
2
case 1: pFunc = Mammal::Speak; break;
* * * * * * * * * * * * default: pFunc = Mammal::Move; break;
написать так

C++
1
2
case 1: pFunc = &Mammal::Speak; break;
* * * * * * * * * * * * default: pFunc = &Mammal::Move; break;
Добавлено через 2 минуты
Цитата Сообщение от isaak Посмотреть сообщение
(ptr -> *pFunc)();
не уверен но возможно надо так
C++
1
*pFunc()
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
07.12.2010, 19:13  [ТС]     Указатели на функции-члены #3
Цитата Сообщение от Sudoki Посмотреть сообщение
Компилятор просит Вас вместо



написать так

C++
1
2
case 1: pFunc = &Mammal::Speak; break;
* * * * * * * * * * * * default: pFunc = &Mammal::Move; break;
Добавлено через 2 минуты


не уверен но возможно надо так
C++
1
*pFunc()
Sudoki спасибо огромное я исправил как вы сказали, но компилятор, снова выдает ошибки:

Error 1 error C2059: syntax error : '*' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p983\p983\p983.cpp 57 p983
Error 2 error C2039: 'ptr' : is not a member of 'Mammal' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p983\p983\p983.cpp 58 p983
Error 3 error C2541: 'delete' : cannot delete objects that are not pointers c:\users\администратор\documents\visual studio 2008\projects\c++\console\p983\p983\p983.cpp 58 p983


кто-нибудь эще может подсказать????!!!!!
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
using namespace std;
class Mammal
{
public:
    Mammal():itsAge(1){}
    virtual ~Mammal(){}
    virtual void Speak() const = 0;
    virtual void Move() const  = 0;protected:
    int itsAge;
};
class Dog: public Mammal
{
public:
    void Speak() const {cout << "Woof!\n";}
    void Move() const {cout << "Walking to heel...\n";}
};
class Cat: public Mammal
{
public:
    void Speak() const {cout << "Meow!\n";}
    void Move() const {cout << "slinking...\n";}
};
class Horse: public Mammal
{
public:
    void Speak() const {cout << "Winnie!\n";}
    void Move() const {cout << "Galloping...\n";}
};
int main()
{
    void (Mammal::*pFunc)() const = 0;
    Mammal* ptr = 0;
    int Animal;
    int Method;
    bool fQuit = false;
    while(fQuit == false)
    {
        cout << "(0)Quit (1)dog (2)cat (3)horse: ";
        cin >> Animal;
        switch (Animal)
        {
        case 1: ptr = new Dog; break;
        case 2: ptr = new Cat; break;
        case 3: ptr = new Horse; break;
        default: fQuit = true; break;
        }
        if (fQuit == false)
        {
            cout << "(1)Speak (2)Move: ";
            cin >> Method;
            switch (Method)
            {
            case 1: pFunc = &Mammal::Speak;break;
            default: pFunc = &Mammal::Move; break;
            }
            (ptr -> *pFunc())();
            delete ptr;
        }
    }
    return 0;
}
Заранее огромное спасибо????!!!!
Yandex
Объявления
07.12.2010, 19:13     Указатели на функции-члены
Ответ Создать тему
Опции темы

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