Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
458 / 70 / 6
Регистрация: 29.01.2018
Сообщений: 1,028
1

Указатель на функцию, которая принимает в качестве параметра указатель на массив

28.01.2019, 15:19. Просмотров 2139. Ответов 12
Метки нет (Все метки)

я не понимаю. вроде делаю правильно, но выходит ошибка.

C++
1
2
3
4
есть функция. int foo(int *mas){};
cоздаю на нее указатель.
int (*p)(int *)=&foo;
вылетает ошибка
компилятор лопочит какую то херь про main.


решил задать вопрос на форуме.
если несложно в паре слов
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2019, 15:19
Ответы с готовыми решениями:

Создать функцию, которая принимает указатель на массив и количество элементов
Люди! Огромная просьба помочь. Как сделать функцию, которая принимает указатель на массив и...

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

Написать функцию, которая принимает указатель на небольшой 2х мерный массив int значениями
Подскажите пожалуйста, надо написать функцию, которая принимает указатель на небольшой 2х мерный...

Указатель на функцию в качестве параметра функции
Доброго времени суток. Стоит задача - имеется функция, которая принимает 2 аргумента: 1 -...

12
557 / 375 / 138
Регистрация: 11.01.2019
Сообщений: 1,568
28.01.2019, 15:20 2
А можно весь код?
0
Mental handicap
1242 / 620 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.01.2019, 15:24 3
Цитата Сообщение от pcmax Посмотреть сообщение
компилятор лопочит какую то херь про main
Вот ведь гад. Давайте погадаем на кофейной гуще что же он лопочит..

Добавлено через 1 минуту
Цитата Сообщение от pcmax Посмотреть сообщение
C++
1
int foo(int *mas){}; // и тут ; не нужна
если что
1
458 / 70 / 6
Регистрация: 29.01.2018
Сообщений: 1,028
28.01.2019, 15:39  [ТС] 4
да, там я накалякал конечно же...
просто уже нет сил.

вобщем пока я не написал вот так
C++
1
int (*p)(int *);  а только потом не присвоил  p=&foo;

то вылетала ошибка. у меня такое чувство ,что компилятор делает что хочет.
он может обработать и запустить то что по сути работать не должно и может забраковать и выдать ошибку на пример из учебника. ему видите ли наверное не все авторы учебников нравятся. некоторые он компилирует, а другие нет.
0
Mental handicap
1242 / 620 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.01.2019, 15:45 5
pcmax,
Цитата Сообщение от jugu Посмотреть сообщение
А можно весь код?
Вам не зря задали этот вопрос..
Цитата Сообщение от Azazel-San Посмотреть сообщение
Давайте погадаем на кофейной гуще что же он лопочит..
А это я к тому что и саму ошибку бы увидеть, в точности как выдал компилятор, а не ваш пересказ.
Цитата Сообщение от pcmax Посмотреть сообщение
что компилятор делает что хочет
Компилятор делает только то что он должен, а именно собирает то что ему дал программист в соответствии с правилами языка.
Цитата Сообщение от pcmax Посмотреть сообщение
он может обработать и запустить то что по сути работать не должно
Пруф?
Цитата Сообщение от pcmax Посмотреть сообщение
может забраковать и выдать ошибку на пример из учебника
Пример из учебника != правильный пример (не всегда покрайней мере).
Цитата Сообщение от pcmax Посмотреть сообщение
ему видите ли наверное не все авторы учебников нравятся
А может дело не в компилятор, а втом кто сидит по ту сторону экрана?
0
458 / 70 / 6
Регистрация: 29.01.2018
Сообщений: 1,028
28.01.2019, 16:41  [ТС] 6
ну там вроде запустил.

сейчас уткнулся в указатель на метод класса.
если у Вас есть время, то посмотрите почему не получается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
class foo{
public:
void func(void){std::cout <<"hi";}
 
};
 
int main(int argc, char*argv[]){
 
void(foo::*p)();//coздал указатель;
p ojb=&foo::func();//coздал объект и присвоил ему адрес метода
 
return 0;
}
дальше даже не пошел, ибо уже ошибка.
что не так?
0
557 / 375 / 138
Регистрация: 11.01.2019
Сообщений: 1,568
28.01.2019, 16:51 7
У вас указатель на функцию, которая ничего не принимает, а в классе функция с параметром типа void. Это несовместимые указатели. И кроме этого куча всего... В общем полная каша в голове ))

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
class foo {
public:
    void func(void) { std::cout << "hi"; }
 
};
 
typedef void(foo::*p_t)(void); //coздал указатель;
 
int main(int argc, char*argv[]) {
 
    foo f;
    p_t p = &foo::func;//coздал объект и присвоил ему адрес метода
 
    return 0;
}
Добавлено через 15 секунд
Указатель, кстати, получается на функции любых объектов класса foo, а не только одного.
1
Mental handicap
1242 / 620 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.01.2019, 16:58 8
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

pcmax,
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
struct Object {
    void foo() { std::cout << "Hello, world!\n"; }
};
 
int main()
{
    void (Object::*pfoo)() = &Object::foo;
    Object obj;
    (obj.*pfoo)();
}
Добавлено через 2 минуты
Цитата Сообщение от pcmax Посмотреть сообщение
ибо уже ошибка
Саму ошибку, так и не дано увидеть? Хотя она уже предсказуемая.
1
458 / 70 / 6
Регистрация: 29.01.2018
Сообщений: 1,028
28.01.2019, 18:51  [ТС] 9
Цитата Сообщение от jugu Посмотреть сообщение
typedef void(foo::*p_t)(void); //coздал указатель;
скажите пожалуйста, а зачем тут typedef?
0
Mental handicap
1242 / 620 / 171
Регистрация: 24.11.2015
Сообщений: 2,426
28.01.2019, 18:56 10
Цитата Сообщение от pcmax Посмотреть сообщение
скажите пожалуйста, а зачем тут typedef?
Он не объязателен, ну и комментарий там не соответвует реальности. Если интересно почитайте о type definition - это оно и есть только для указателя на метод класса.
https://en.cppreference.com/w/cpp/language/typedef
1
557 / 375 / 138
Регистрация: 11.01.2019
Сообщений: 1,568
28.01.2019, 19:14 11
Цитата Сообщение от pcmax Посмотреть сообщение
скажите пожалуйста, а зачем тут typedef?
Чтобы ввести имя для типа указателя. Потом это имя можно использовать много раз.
1
284 / 175 / 21
Регистрация: 16.02.2018
Сообщений: 666
28.01.2019, 20:23 12
Цитата Сообщение от jugu Посмотреть сообщение
У вас указатель на функцию, которая ничего не принимает, а в классе функция с параметром типа void. Это несовместимые указатели.
Чё?
0
284 / 175 / 21
Регистрация: 16.02.2018
Сообщений: 666
30.01.2019, 02:38 13
Цитата Сообщение от jugu Посмотреть сообщение
У вас указатель на функцию, которая ничего не принимает, а в классе функция с параметром типа void. Это несовместимые указатели.
Разупорись
Цитата Сообщение от https://timsong-cpp.github.io/cppwp/n3337/dcl.fct#4
The parameter list (void) is equivalent to the empty parameter list.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2019, 02:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Указатель на функцию в качестве параметра функции
ln(1-x)+sinx необходимо создать программу демонстрирующую возможность использования указателя на...

Создать функцию EvenColReport, которая принимает в качестве параметра двумерный массив целых чисел (объявлен как указате
Создать функцию EvenColReport, которая принимает в качестве параметра двумерный массив целых чисел...

Нужно передать в качестве параметра указатель на массив
Нужно передать в качестве параметра указатель на массив. Я так понимаю, есть несколько способов это...

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции,...


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

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

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