#include "stdafx.h"
#include <iostream>
int summ(int a, int b);
int razn(int a, int b);
int mult(int a, int b);
int main()
{
int (**func_p)(int a, int b);
func_p[0] = &summ;
func_p[1] = &razn;
func_p[2] = &mult;
std::cout << func_p[0](6, 5) << "\n";
std::cout << func_p[1](6, 5) << "\n";
std::cout << func_p[2](6, 5) << "\n";
return 0;
}
int summ(int a, int b){ return a + b;}
int razn(int a, int b){ return a-b;}
int mult(int a, int b){ return a*b;}
После успешной компиляции и линкования, дебагер выдает ошибку на этот код
The variable 'func_p' is being used without being defined.
В чем проблема?
Возможно я сам неправильно подхожу к делу?
Zh0rzh:
> > int (**func_p)(int a, int b);
>
> func_p[0] = &summ;
> func_p[1] = &razn;
> func_p[2] = &mult;
>
>
> дебагер выдает ошибку на этот код The variable 'func_p' is being used without being defined.
>
> В чем проблема?
В том, что для массива указателей на функции не выделена память.
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Так а почему тогда для обычного указателя не надо выделять память.
Рабочий код.
int (*func)(int, int);
func = &summ;
Zh0rzh:
> Так а почему тогда для обычного указателя не надо выделять память.
> Рабочий код.
> > int (*func)(int, int);
> func = &summ;
>
Потому что она уже выделена компилятором. В этом смысле указатель аналогичен, скажем, целому типу:
int i;
i = 10; // все хорошо, память выделять не надо
int* p;
p[0] = 10; // все плохо, запись в не выделенную память
Возможно, всё станет еще чуть-чуть яснее, если для указателя на функцию завести typedef:
typedef int (*Func)(int, int);
Func f;
f = &summ; // все хорошо
Func* f;
f[0] = &summ; // все плохо, индексирование неинициализированного указателя
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, Zh0rzh, Вы писали:
Z>Z>#include "stdafx.h"
Z>#include <iostream>
Z>int summ(int a, int b);
Z>int razn(int a, int b);
Z>int mult(int a, int b);
Z>int main()
Z>{
Z> int (**func_p)(int a, int b);
Z> func_p[0] = &summ;
Z> func_p[1] = &razn;
Z> func_p[2] = &mult;
Z> std::cout << func_p[0](6, 5) << "\n";
Z> std::cout << func_p[1](6, 5) << "\n";
Z> std::cout << func_p[2](6, 5) << "\n";
Z> return 0;
Z>}
Z>int summ(int a, int b){ return a + b;}
Z>int razn(int a, int b){ return a-b;}
Z>int mult(int a, int b){ return a*b;}
Z>
Z>После успешной компиляции и линкования, дебагер выдает ошибку на этот код The variable 'func_p' is being used without being defined.
Z>В чем проблема?
Z>Возможно я сам неправильно подхожу к делу?
Это лечится так —
............................
int summ(int a, int b);
int razn(int a, int b);
int mult(int a, int b);
// объявляем тип — указатель на ф-цию
typedef int (* point)(int, int);
int main()
{
int (**func_p)(int a, int b);
func_p = new point[3]; // Выделяем память для 3х указателей ны ф-цию , func — указатель на начало этого
// массива
// тиеперь можно инициализировать
func_p[0] = &summ;
func_p[1] = &razn;
func_p[2] = &mult;
std::cout << func_p[0](6, 5) << "\n";
std::cout << func_p[1](6, 5) << "\n";
std::cout << func_p[2](6, 5) << "\n";
return 0;
}
int summ(int a, int b){ return a + b;}
int razn(int a, int b){ return a-b;}
int mult(int a, int b){ return a*b;}