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

Непонятки с аргументами функции - C++

Восстановить пароль Регистрация
 
Fraxinus
 Аватар для Fraxinus
23 / 23 / 1
Регистрация: 31.05.2011
Сообщений: 199
21.03.2014, 20:07     Непонятки с аргументами функции #1
Класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MyStruct
{
public:
    struct Element
    {
        Element * next;
        Element * prev;
        string BookOrMagazine;
        string NameOfBook;
        string Year;
        string PublishingHouse;
        Element();
    };
 
    Element * begin = new Element;
    void ReadToEnd(MyStruct::Element **);
    void ReadToBegin(MyStruct::Element **);
    void DelEverySecond(MyStruct::Element **);
    void Push(MyStruct::Element **);
};
Реализую функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void MyStruct::Push(MyStruct::Element ** begin)
{
}
 
void MyStruct::ReadToEnd(MyStruct::Element ** begin)
{
}
 
void MyStruct::ReadToBegin(MyStruct::Element ** begin)
{
}
 
void MyStruct::DelEverySecond(MyStruct::Element ** begin)
{
}
main:
C++
1
2
3
4
5
6
7
8
int main(int argc, char* argv[])
{
    MyStruct myStruct;
    void(*p[4])(MyStruct::Element **) =
    { myStruct.ReadToEnd, myStruct.ReadToBegin, myStruct.DelEverySecond, myStruct.Push };
    _getch();
    return 0;
}
Получаю:
Код
error C2440: инициализация: невозможно преобразовать "overloaded-function" в "void (__cdecl *)(MyStruct::Element **)"
На строчке, где объявляю массив функций. Что не так???
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
just_freelance
61 / 37 / 9
Регистрация: 15.03.2014
Сообщений: 315
21.03.2014, 20:11     Непонятки с аргументами функции #2
Цитата Сообщение от Fraxinus Посмотреть сообщение
Element * begin = new Element;
А что это такое вы тут собираетесь делать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2014, 20:33     Непонятки с аргументами функции #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Fraxinus Посмотреть сообщение
На строчке, где объявляю массив функций. Что не так???
Указатель на функцию и указатель на метод класса - это разные вещи.

Добавлено через 9 минут
C++
1
2
3
4
typedef void (MyStruct::*p_method)(MyStruct::Element**);
p_method arr[4] = {&MyStruct::ReadToEnd, &MyStruct::ReadToBegin, &MyStruct::DelEverySecond, &MyStruct::Push};
MyStruct myStruct;
(myStruct.*arr[0])(&myStruct.begin);
Fraxinus
 Аватар для Fraxinus
23 / 23 / 1
Регистрация: 31.05.2011
Сообщений: 199
24.03.2014, 20:05  [ТС]     Непонятки с аргументами функции #4
alsav22, спасибо за предыдущий ответ. Теперь подскажите пожалуйста в данной ситуацииЖ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyStruct
{
public:
    void ReadToEnd(MyStruct::Element **);
    void ReadToBegin(MyStruct::Element **);
    void DelEverySecond(MyStruct::Element **);
    void Push(MyStruct::Element **);
 
    //функция, в которой надо реализовать массив указателей на остальные 4 функции
    void VoidArr();
 
 
};
Добавил новую функцию. КАК в этой функции создать массив указателей на остальные функции?
C++
1
2
3
4
    void VoidArr()
    {
        //как?
    }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2014, 20:25     Непонятки с аргументами функции #5
Цитата Сообщение от Fraxinus Посмотреть сообщение
КАК в этой функции создать массив указателей на остальные функции?
Как в 3 посте не создаётся?
Fraxinus
 Аватар для Fraxinus
23 / 23 / 1
Регистрация: 31.05.2011
Сообщений: 199
24.03.2014, 20:36  [ТС]     Непонятки с аргументами функции #6
К сожалению нет...
Ведь мы внутри класса, по идее не должны создавать экземпляр?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.03.2014, 20:48     Непонятки с аргументами функции #7
Цитата Сообщение от Fraxinus Посмотреть сообщение
К сожалению нет...
Пробовали?

Добавлено через 7 минут
Всё компилируется:
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
class MyStruct
{
public:
    struct Element
    {
        Element * next;
        Element * prev;
        string BookOrMagazine;
        string NameOfBook;
        string Year;
        string PublishingHouse;
        Element();
    };
    Element* begin;
    void ReadToEnd(MyStruct::Element **)
    {}
    void ReadToBegin(MyStruct::Element **)
    {}
    void DelEverySecond(MyStruct::Element **)
    {}
    void Push(MyStruct::Element **)
    {}
 
    typedef void (MyStruct::*p_method)(MyStruct::Element**);
    //функция, в которой надо реализовать массив указателей на остальные 4 функции
    void VoidArr()
    {
        p_method arr[4] = {&MyStruct::ReadToEnd, &MyStruct::ReadToBegin, &MyStruct::DelEverySecond, &MyStruct::Push};
    }
 
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2014, 21:35     Непонятки с аргументами функции
Еще ссылки по теме:

C++ Конструкторы с тремя аргументами
C++ Работа с аргументами
C++ Макросы с аргументами

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

Или воспользуйтесь поиском по форуму:
Fraxinus
 Аватар для Fraxinus
23 / 23 / 1
Регистрация: 31.05.2011
Сообщений: 199
24.03.2014, 21:35  [ТС]     Непонятки с аргументами функции #8
alsav22, у кого-то руки кривые. Спасибо тебе, человек!
Yandex
Объявления
24.03.2014, 21:35     Непонятки с аргументами функции
Ответ Создать тему
Опции темы

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