3 / 3 / 0
Регистрация: 28.11.2018
Сообщений: 242
1

Не могу создать указатель на функцию. ошибка: нестандартный синтаксис; используйте "&", чтобы создать указатель на член

14.04.2019, 14:32. Показов 2360. Ответов 3
Метки нет (Все метки)

Выбивает ошибку, когда хочу присвоить переменной адрес какой то функции.
Ошибка в строке 28(если убрать комментарии: 30-33)
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
class Map {
    class Trees {
    public:
        unsigned char(*twmap)[Width_Map];
        void DrawTree_0(int,int);
        void DrawTree_1(int,int);
        void DrawTree_2(int,int);
        void DrawTree_3(int,int);
    };
    Trees tree;
    Image image;
    Texture texture;
    Sprite sprite;
    unsigned char *bmap;
    void Generation(int);
public:
    void DebugDraw();
    void Draw(RenderWindow&, Sprite);
    unsigned char(*wmap)[Width_Map];//mian(work) map
    Map(string, int seed = 0);
    ~Map();
};
 
//...
 
void Map::Generation(int seed){
//...
    void (*t_tree)(int, int) = &tree.DrawTree_0;
 
    /*if (t == 1)    t_tree = tree.DrawTree_1;
    else if (t == 3)   t_tree = tree.DrawTree_2;
    else if (t == 4)   t_tree = tree.DrawTree_3;
    else             t_tree = tree.DrawTree_0;
 
    t_tree(i, piv - 1);*/
//...
}
Как это исправить и почему так происходит? Если можно, то как более развернуто(ответ). Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2019, 14:32
Ответы с готовыми решениями:

Нестандартный синтаксис, используйте "&", чтобы создать указатель на член
Здравствуйте,начал изучать классы и вот такая фигня.Кому не сложно,помогите исправить #include...

нестандартный синтаксис используйте "&", чтобы создать указатель на член C3867
Нужно определить принадлежность точки прямой, используя классы. Выходит ошибка C3867 на 56 и 69...

Error C3867: "String::length": нестандартный синтаксис; используйте "&", чтобы создать указатель на член
В классе написал такой метод, чтобы посчитать количество символов в строке: int String::length()...

"Нестандартный синтаксис, используйте "&", чтобы создать указатель на член"
Ошибка в строке 79: Animals::Show нестандартный синтаксис, используйте "&", чтобы создать...

3
16466 / 8966 / 2198
Регистрация: 30.01.2014
Сообщений: 15,567
14.04.2019, 15:08 2
Лучший ответ Сообщение было отмечено MJ_PRUTYG как решение

Решение

MJ_PRUTYG,

Тип "указатель на функцию-член" записывается как <возвращаемое значение> (<тип класса>:: *)(<список параметров>), указатель на функцию-член получается через синтаксис &<тип класса>::<имя функции>.
Вызов функции по указателю выполняется через (<объект класса>.*<указатель>)(<список аргументов>);

Т.е.
C++
1
2
3
4
5
6
7
8
    void (Trees:: *t_tree)(int, int);
 
    if (t == 1)      t_tree = &Trees::DrawTree_1;
    else if (t == 3) t_tree = &Trees::DrawTree_2;
    else if (t == 4) t_tree = &Trees::DrawTree_3;
    else             t_tree = &Trees::DrawTree_0;
 
    (tree.*t_tree)(i, piv - 1);
Собственно это есть в любом учебнике. Каким вы пользуетесь сейчас?
1
3 / 3 / 0
Регистрация: 28.11.2018
Сообщений: 242
14.04.2019, 15:21  [ТС] 3
DrOffset, ааа, я понял! Спасибо большое!

Сейчас никаким не пользуюсь, вернее использую конспект(книга в электронном формате) с университета, в котором учусь. Про указатели на функцию тема была, а про указатели на функцию-член, ничего не писалось(т.к. до ООП еще не дошли).
А в конспекте след курса(где учим ООП) - ничего не встречал подобного; банально, темы: полиморфиз, наследование, динам. структуры итд

А какую бы Вы посоветовали книгу, как для новичка в этом деле?? Т.к. ну очень интересно! Если можно, то чтобы как можно более разжеванно и глубоко со всеми узкими моментами, нюансами объясняли.
Заранее спасибо за ответ.
0
16466 / 8966 / 2198
Регистрация: 30.01.2014
Сообщений: 15,567
14.04.2019, 15:33 4
Цитата Сообщение от MJ_PRUTYG Посмотреть сообщение
А какую бы Вы посоветовали книгу, как для новичка в этом деле?? Т.к. ну очень интересно! Если можно, то чтобы как можно более разжеванно и глубоко со всеми узкими моментами, нюансами объясняли.
Заранее спасибо за ответ.
Традиционно всем, кто действительно намерен изучать язык, советую книгу Липпмана.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2019, 15:33
Помогаю со студенческими работами здесь

Ошибка C3867 "нестандартный синтаксис; используйте "&", чтобы создать указатель на член"
pictureBox1-&gt;Invalidate; Вызывает ошибку C3867. Что сделать то нужно? И почему тогда vs сама...

Не могу создать указатель на перегруженную функцию-член класса
Есть функция монстр из vulkan api. Она является членом класса. Просто написать её название не...

Где ошибка невозможно преобразовать указатель "this" из "const pers" в "pers &" при выводе объектов через cout
Добрый день! Переписал код из книг Лафоре, создание мультимножества из собственных объектов-...

Как создать указатель на функцию-член класса и вызвать его?
Подскажите как правильно сделать, а в дальнейшем вызвать указатель на функцию член класса:...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru