Форум программистов, компьютерный форум CyberForum.ru

Массив ссылок на функции - C++

Восстановить пароль Регистрация
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 12:58     Массив ссылок на функции #1
Объясните где ошибка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
void minimum (int*,int);
void maximum (int*,int);
void average (int*,int);
 
int main()
{      
 setlocale(LC_CTYPE, "rus"); // русский язык в консоли
 const int a =10;
 int count=0;
 int aray[a]={0};
 void(*f[3])(int*,int)={minimum,maximum,average};
 std::cout<<"Выберите : \n ";
 
 system ("pause");
 
 
 
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2013, 12:58     Массив ссылок на функции
Посмотрите здесь:

Dызовом родовой функции! Нужно передать массив в качестве аргумента функции через указатель." C++
Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. C++
Одномерный массив и функции (сделать 3 функции ввода/решения/вывода) C++
C++ C++ Функции Массив (переписать в виде функции)
C++ Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 12:59     Массив ссылок на функции #2
Определения функций где?
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 13:03  [ТС]     Массив ссылок на функции #3
Цитата Сообщение от Schizorb Посмотреть сообщение
Определения функций где?
Я их еще не писал, у меня не компилится мой массив с сылками

ошибка
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl average(int *,int)" (?average@@YAXPAHH@Z) в функции _main
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl maximum(int *,int)" (?maximum@@YAXPAHH@Z) в функции _main
1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl minimum(int *,int)" (?minimum@@YAXPAHH@Z) в функции _main
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 13:06     Массив ссылок на функции #4
Цитата Сообщение от MousePro Посмотреть сообщение
Я их еще не писал
Так напиши и вопросы отпадут.
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 13:21  [ТС]     Массив ссылок на функции #5
Цитата Сообщение от Schizorb Посмотреть сообщение
Так напиши и вопросы отпадут.
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
#include <iostream>
#include <time.h>
void minimum (int*,int);
/*
void maximum (int*,int);
void average (int*,int);
*/
int main()
{      
    srand(time(NULL));
 setlocale(LC_CTYPE, "rus"); // русский язык в консоли
 const int a =10;
 int count=0;
 int aray[a]={0};
 for(int x=0;x<a;x++)
 {
     aray[x]=1+rand()%100;
 }
 
 std::cout<<"Выберите : \n ";
 std::cin>>count;
 /*
 void(*f[1])(int*,int)={minimum};
 (*f[count])(aray,a);
 */
 minimum(aray,a);
 system ("pause");
 
 
 
 return 0;
}
 
void minimum( int * aray,int a)
{
    for(int x=0;x<a;x++)
        std::cout<<aray[x]<<"\n";
}
Блин ппц, не могу никак привыкнуть к указателям... Где теперь тут ошибка )))
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 13:25     Массив ссылок на функции #6
Кроме неподключенного #include <cstdlib> не вижу ошибки.
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 13:28  [ТС]     Массив ссылок на функции #7
все равно не хочет
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 13:30     Массив ссылок на функции #8
Кто не хочет и что не хочет? Конкретно, какая ошибка. Во время компиляции или исполнения?

Вот первый код:

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
#include <iostream>
#include <cstdlib>
 
void minimum (int*,int);
void maximum (int*,int);
void average (int*,int);
 
int main()
{      
    setlocale(LC_CTYPE, "rus"); // русский язык в консоли
    
    const int a =10;
    int count=0;
    int aray[a]={0};
    void(*f[3])(int*,int)={minimum,maximum,average};
    
    std::cout<<"Выберите : \n ";
 
    // тут какой-то код
    
    system ("pause");
    return 0;
}
 
void minimum (int*,int)
{
    // тут какое-то тело
}
void maximum (int*,int)
{
    // тут тоже какое-то тело
}
void average (int*,int)
{
    // тут еще какое-то тело
}
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 13:32  [ТС]     Массив ссылок на функции #9
Цитата Сообщение от Schizorb Посмотреть сообщение
Кто не хочет и что не хочет? Конкретно, какая ошибка. Во время компиляции или исполнения?
да это у меня что то с студией, она даже "привет мир" не захотела компилить)
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
06.08.2013, 13:38     Массив ссылок на функции #10
Блин ппц, не могу никак привыкнуть к указателям... Где теперь тут ошибка )))
Наверное проблема в этом
C++
1
2
 void(*f[1])(int*,int)={minimum};
 (*f[count])(aray,a);
замениете на

C++
1
2
 void(*f[1])(int*,int)={minimum};
 (*f)(aray,a);
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
06.08.2013, 13:46     Массив ссылок на функции #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
void max(int, int*) {}
void min(int, int*) {}
void avg(int, int*) {}
 
int main()
{
    using func_t = void (*)(int, int*);
    func_t functions[3] = { max, min, avg };
    int x = 0;
    functions[0](x, &x);
    return 0 ;
}
Добавлено через 53 секунды
Цитата Сообщение от MousePro Посмотреть сообщение
void(*f[3])(int*,int)=
зверски удобная запись
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 14:05  [ТС]     Массив ссылок на функции #12
Цитата Сообщение от Olivеr Посмотреть сообщение
зверски удобная запись
Да вроде бы норм )))

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
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <time.h>
#include <cstdlib>
void qSort(int[], int, int);
void all(int *,int);
void minimum (int *,int);
void maximum (int*,int);
void average (int*,int);
int main()
{      
    srand(time(NULL));
 setlocale(LC_CTYPE, "rus"); // русский язык в консоли
 const int a =10;
 int count=0;
 int aray[a]={0};
 for(int x=0;x<a;++x)
 {
     aray[x]=1+rand()%100;
 }
qSort(aray, 0, a-1);
 
 while(count !=4)
 {
 std::cout<<"Выберите : \n ";
 std::cout<<"0      Напечатать массив оценок \n ";
 std::cout<<"1  Найти низшую оценку \n ";
 std::cout<<"2  Найти высшую оценку \n ";
 std::cout<<"3  Найти среднее значение \n ";
 std::cout<<"4  Выход \n ";
 std::cin>>count;
 
if(count!=4)
{
 void(*f[4])(int*,int)={all,minimum,maximum,average};
 (*f[count])(aray,a);
}
 }
 system ("pause");
 
 
 
 return 0;
}
 
void all(int *aray,int a)
{
    std::cout<<"\n";
    for(int x=0;x<a;++x)
    {
        std::cout<<aray[x]<<"\n";
    }
}
void minimum( int * aray,int a)
{
    std::cout<<"\n";
std::cout<<aray[0]<<"\n";
}
void maximum( int * aray,int a)
{
    std::cout<<"\n";
std::cout<<aray[9]<<"\n";
}
 
 
void average( int * aray,int a)
{
int total=0;
for(int x=0;x<a;++x)
{
    total+=aray[x];
}
std::cout<<"\n"<<total/a<<"\n";
}
 
void qSort(int A[], int low, int high) {
      int i = low;                
      int j = high;
      int x = A[(low+high)/2];  
      do {
          while(A[i] < x) ++i;  
          while(A[j] > x) --j;  
          if(i <= j){           
              int temp = A[i];
              A[i] = A[j];
              A[j] = temp;
              
              i++; j--;
          }
      } while(i < j);
      if(low < j) qSort(A, low, j);
      if(i < high) qSort(A, i, high);
  }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 15:22     Массив ссылок на функции
Еще ссылки по теме:

Особенности использования указателей и ссылок в C++ при возврате из функции C++
шаблон функции который принимает в параметры массив количиство елементов и должен найти сумму елементов массив C++
Вывод двух параметров из функции с использованием ссылок C++

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

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6172 / 2901 / 284
Регистрация: 04.12.2011
Сообщений: 7,722
Записей в блоге: 3
06.08.2013, 15:22     Массив ссылок на функции #13
typedef'ом можно определить:
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
void minimum (int*,int);
void maximum (int*,int);
void average (int*,int);
 
#include<iostream>
using namespace std;
 
int main()
{  
setlocale(LC_ALL, "Russian");
typedef void (*fn_ptr)(int*, int);//
fn_ptr fp[3]={minimum, maximum, average};
int arr[4]={1,2,3,4};
for(int i=0; i<3; ++i){
    fp[i](arr, 4);
    cout<<arr[0]<<endl;
}
 
cout<<endl; 
system ("pause");
     return 0;
}
 
void minimum (int* ar, int sz)
{
  ar[0]=10; 
}
void maximum (int* ar, int sz)
{
 ar[0]=200; 
}
void average (int* ar, int sz)
{
 ar[0]=150; 
}
Yandex
Объявления
06.08.2013, 15:22     Массив ссылок на функции
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru