указатели на функции - PullRequest
       21

указатели на функции

4 голосов
/ 26 апреля 2010

У меня есть две основные задачи Cpp, но у меня все еще есть проблемы с ними. Сначала нужно написать функции mul1, div1, sub1, sum1, принимая в качестве аргументов целые числа и возвращая целые числа. Затем мне нужно создать указатели 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 ]

15 голосов
/ 26 апреля 2010

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

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

1009 * Е.Г. *

funPtr_type array_of_fn_ptrs[];
1 голос
/ 26 апреля 2010

Этот int *funPtr1(int, int); объявляет функцию .

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...