2010-04-26 6 views
4

У меня есть две основные задачи Cpp, но все же у меня проблемы с ними. Сначала нужно написать функции mul1, div1, sub1, sum1, взяв ints как аргументы и возвращающие int. Затем мне нужно создать указатели ptrFun1 и ptrFun2 для функций mul1 и sum1 и распечатать результаты их использования. Проблема начинается с определения этих указателей. Я думал, что делаю все правильно, но devcpp дает мне ошибки в компиляции.указатели на функции

#include <iostream> 
using namespace std; 

int mul1(int a,int b) 
{ 
    return a * b; 
} 

int div1(int a,int b) 
{ 
    return a/b;  
} 

int sum1(int a,int b) 
{ 
    return a + b; 
} 

int sub1(int a,int b) 
{ 
    return a - b;  
} 


int main() 
{ 
    int a=1; 
    int b=5; 

    cout << mul1(a,b) << endl; 
    cout << div1(a,b) << endl; 
    cout << sum1(a,b) << endl; 
    cout << sub1(a,b) << endl; 

    int *funPtr1(int, int); 
    int *funPtr2(int, int); 

    funPtr1 = sum1; 
    funPtr2 = mul1; 

    cout << funPtr1(a,b) << endl; 
    cout << funPtr2(a,b) << endl; 

    system("PAUSE"); 
    return 0; 
} 
 
38 assignment of function `int* funPtr1(int, int)' 
38 cannot convert `int()(int, int)' to `int*()(int, int)' in assignment 

Задача 2 заключается в создании массива указателей на те функции, названные tabFunPtr. Как это сделать ?

+2

Dev-Cpp является старым и неподдерживаемым. Вы должны попробовать Code :: Blocks. http://www.codeblocks.org/ –

+0

DevC++ - древняя куча дерьма. Вам нужен новый компилятор. – Puppy

ответ

15

Вместо int *funPtr1(int, int) вам нужно int (*funPtr1)(int, int), чтобы объявить указатель функции. В противном случае вы просто объявляете функцию, которая возвращает указатель на int.

Для массива указателей функций, вероятно, наиболее ясно сделать typedef для типа указателя функции, а затем объявить массив, используя этот typedef.

E.g.

funPtr_type array_of_fn_ptrs[]; 
1

Этот int *funPtr1(int, int);присваивает функцию.

Это int (*funPtr1)(int, int);определяет указатель функции.

Это typedef int (*funPtr1)(int, int);определяет функция типа указателя.

Если вы считаете, что это путано, попробуйте определить указатель на функцию, которая возвращает массив указателей на функции-члены ... Синтаксис объявления C - это кошмар.

Смежные вопросы