Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > error C2276: &: недопустимая операция с выражением


Автор: Mormishka 23.4.2011, 16:14
Почему нельзя передать указатель на функцию член?

Код

//Sample.h

#pragma once
class Sample
{
public:
    Sample(void);
    int fun1(int(*fun_x)(int),int x0);
    int fun2(int x);
    int fun3(int x);
    ~Sample(void);
};


Код

//Sample.cpp

#include "Sample.h"

Sample::Sample(void)
{
}

int Sample::fun1(int(*fun_x)(int),int x0)
{
    return fun_x(x0);
}

int Sample::fun2(int x)
{
    return x;
}

int Sample::fun3(int x)
{
    return fun1(&fun2,x);
}

Sample::~Sample(void)
{
}


Код

Ошибка    1    error C2276: &: недопустимая операция с выражением привязанной функции-члена
        2    IntelliSense: аргумент типа "int (Sample::*)(int x)" несовместим с параметром типа "int (*)(int)"

Автор: boostcoder 23.4.2011, 16:17
Код

struct Sample {
    int fun1(int(Sample::*fun_x)(int),int x0) {
       (this->*fun_x)(x0);
    }
    int fun2(int x) {}
};

int main() {
   Sample s;
   s.fun1(&Sample::fun2, 33);
}

Автор: alexvs11 23.4.2011, 16:17
http://forum.vingrad.ru/topic-325577.html
указатель на функцию член не есть указатель на функцию

Автор: boostcoder 23.4.2011, 16:19
Цитата(alexvs11 @  23.4.2011,  16:17 Найти цитируемый пост)
http://forum.vingrad.ru/topic-325577.html
указатель на функцию член не есть указатель на функцию 


Mormishka, так ты уже поднимал этот вопрос...

Автор: alexvs11 23.4.2011, 16:28
boostcoder, и правда smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)