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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
#1

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

06.08.2013, 12:58. Просмотров 974. Ответов 12
Метки нет (Все метки)

Объясните где ошибка:

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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2013, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив ссылок на функции (C++):

Массив ссылок - C++
Для проверки определить массив ссылок на абстрактный класс, которым присваиваются адреса различных объектов. не понимаю как это (

Как инициализировать массив ссылок? - C++
//--------------------------------------------------------------------------- #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #pragma hdrstop ...

Вывод двух параметров из функции с использованием ссылок - C++
В программе необходимо ввести в функцию один параметр (х), а получить из неё три. Помогите пожалуйста правильно сделать. Заранее спасибо. ...

Определить массив ссылок на абстрактный класс - C++
Было задание создать абстрактный базовый класс с виртуальной функцией - площадь. Создать производные классы: прямоугольник, круг,...

Особенности использования указателей и ссылок в C++ при возврате из функции - C++
Пусть у нас есть некий класс CBase и есть функция, которая создает и возвращает объект класса CBase. Создать она его может стеке или в...

Различные функции, для которых можно создать массив указателей на функции - C++
Придумайте не менее 3-х различных функций, для которых можно создать массив указателей на функции.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 12:59 #2
Определения функций где?
0
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
0
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 13:06 #4
Цитата Сообщение от MousePro Посмотреть сообщение
Я их еще не писал
Так напиши и вопросы отпадут.
0
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";
}
Блин ппц, не могу никак привыкнуть к указателям... Где теперь тут ошибка )))
0
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
06.08.2013, 13:25 #6
Кроме неподключенного #include <cstdlib> не вижу ошибки.
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 13:28  [ТС] #7
все равно не хочет
0
Schizorb
509 / 461 / 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)
{
    // тут еще какое-то тело
}
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
06.08.2013, 13:32  [ТС] #9
Цитата Сообщение от Schizorb Посмотреть сообщение
Кто не хочет и что не хочет? Конкретно, какая ошибка. Во время компиляции или исполнения?
да это у меня что то с студией, она даже "привет мир" не захотела компилить)
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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);
1
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
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)=
зверски удобная запись
2
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);
  }
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
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; 
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2013, 15:22
Привет! Вот еще темы с ответами:

Одномерный массив и функции (сделать 3 функции ввода/решения/вывода) - C++
Ребята помогите, хоть убейте не могу эту задачу с помощью функций сделать!( Нужно сделать 3 функции ввода/решения/вывода. Кому не сложно...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

Как передать массив структур в функцию в качестве параметра, чтобы изменения в функции меняли исходный массив? - C++
Допустим есть структура struct Base { int a; int b; int c; }; В основном методе main() объявим массив...

C++ Функции Массив (переписать в виде функции) - C++
Помогите пожалуйста, как сделать задание в виде функции. В обычном коде написал, а вот как переделать не знаю, помогите нубу) ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.08.2013, 15:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru