160 / 101 / 14
Регистрация: 17.10.2012
Сообщений: 488
1

Указатель на функцию и параметры по умолчанию

26.02.2013, 20:53. Показов 2110. Ответов 1
Метки нет (Все метки)

Приветствую! Есть такая задача - мне нужно передавать в специальную функцию массив и указатель на функцию. Функции эти для сортировки, и имеют вид примерно такой:
C++
1
void s_sortname(char*, uint)
char* - массив
uint - число элементов массива.

В нужной функции я объявил такой указатель в качестве параметра

C++
1
void (*sort_fx)(char*, uint)
И вроде как всё работает, но есть проблема - у алгоритма quicksort функция имеет вид:

C++
1
void s_quicksort(char* str, uint high, uint low = 0)
Вот и возникла проблема, как передать эту функцию. Я надеялся, что компилятор учтёт параметр по умолчанию, но не вышло (ошибка типов).

Как решить проблему?

Код прилагается:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//Bubble, Selection, Insertion, QS, Shell
 
#include <iostream>
#include <time.h>
#include <string.h>
 
#define SP " "
 
using namespace std;
 
typedef unsigned int uint;
 
void odd_sort(char* str, uint num, void (*sort_fx)(char*, uint)) {
 
    (*sort_fx)(str, num);
 
}
 
void s_qsort(char * array, uint high, uint low = 0) {
 
    int i = low;                
    int j = high;
 
    int x = array[(low+high)/2];
 
    do {
 
        while(array[i] < x) ++i;
        while(array[j] > x) --j;
 
        if(i <= j) {           
            
            swap(array[i], array[j]);
            
            i++; j--;
 
        }
 
    } while(i < j);
 
    if(low < j)  s_qsort(array, low, j);
    if(i < high) s_qsort(array, i, high);
 
}
 
int main() {
 
    //===BASE_INITIALISATION===
 
    cout << "Hello! This program will sort all odd element in array\n";
 
    char   some_text[] = "aSbCfDg"; //Source text
    char * sort_text;       //Second d-string for sort tests
 
    int i = strlen(some_text);
 
    sort_text = new char[i];
    
    cout << "Original text (len: " << i << "):\n";
 
    cout << some_text << endl;
 
    //===SORT_TABLE===
 
    strcpy(sort_text, some_text);
 
 
 
    odd_sort(some_text, i, s_qsort);
 
    cout << sort_text;
 
    //===END===
 
    delete [] sort_text;
 
    system("pause");
 
    return 0;
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2013, 20:53
Ответы с готовыми решениями:

Как создать функцию, принимающую в качестве аргумента иную функцию, в которой есть параметры по умолчанию?
У меня имеется функция msk с параметрами по умолчанию double msk(double a = 0.0, double b = 1.0) И...

Указатель на функцию с аргументами по умолчанию
Можно ли вообще определить и записать подобное чудо?

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая...

Параметры функции: параметры по умолчанию
помогите пожалуйста понять. void foo(int a, int b, int c=1){std::cout &lt;&lt; a &lt;&lt; &quot;\t&quot; &lt;&lt; b &lt;&lt;...

1
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
26.02.2013, 23:59 2
C++
1
2
3
4
void ss_qsort(char * array, uint high)
{
    s_qsort(array, high, 0);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2013, 23:59
Помогаю со студенческими работами здесь

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); ...

Создать функцию с двумя аргументами, имеющими значение по умолчанию; вывести на экран значения по умолчанию
Доброго времени суток, помогите пожалуйста с задачей. -Создайте функцию с двумя аргументами,...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая...

Указатель на функцию, которая принимает в качестве параметра указатель на массив
я не понимаю. вроде делаю правильно, но выходит ошибка. есть функция. int foo(int *mas){};...


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

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

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