Добрый день. Я новичок в C++ и хочу написать простейшую программку которая с помощью функций высчитывает значения ( которое надо ввести)
. И что бы определить какую операцию, нужно выбрать какую использовать функцию. При её включении выдаёт ошибку [ main.cpp: In function ‘int main()’:
main.cpp:51:10: error: invalid conversion from ‘int’ to ‘int (*)(int)’ [-fpermissive]
point = c;]
то есть, проблема кроется в указателе. Не равнодушным прошу отозваться.
Int foo(int b)
{
return b + 2;
}
int foo2(int b)
{
return b - 2;
}
int main()
{
int c;
int a;
int b;
cout << "Select a value 1 or 2" << endl;
cout << "1 = (a + 2), 2 = (a - 2)" << endl;
cin >> a;
cout << "select a value" << endl;
cin >> b;
if(a == (1 || 2))
{
if(a == 1)
{
int(*c)(int) = foo;
}
if(a == 2)
{
int(*c)(int) = foo2;
}
}
else
{
exit(1);
}
int(*point)(int b);
point = c;
cout << point(b) << endl;
}
C/C++
Проблема с указателем в C++
У тебя путаница с переменными
int c; // переменная типа int
int(*c)(int) // переменная типа "указатель на функцию". Имя то же самое.
Переменная, объявленная в блоке { }, существует только внутри этого блока.
Присваивание, вызывающее ошибку:
point = c;
Справа int, слева указатель на функцию. Разные, несовместимые типы данных.
int c; // переменная типа int
int(*c)(int) // переменная типа "указатель на функцию". Имя то же самое.
Переменная, объявленная в блоке { }, существует только внутри этого блока.
Присваивание, вызывающее ошибку:
point = c;
Справа int, слева указатель на функцию. Разные, несовместимые типы данных.
Валера Гаврусев
не в этом дело, я убрал переменную ( c ) и ничего не произошлою
if(a == (1 || 2)) ??
int c; int(*c)(int) ??
int c; int(*c)(int) ??
Может такое подойдет?
#include<stdio.h>
int foo(int b)
{ return b + 2; }
int foo2(int b)
{ return b - 2; }
int main()
{
int (*point)(int);
int a=0, b=0;
printf("\n%","Select a value 1 or 2");
printf("\n%s","1 = (a + 2), 2 = (a - 2) : ");
scanf("%d",&a);
if(a<1 || a>2) exit(0);
printf("\n%s","select a value : ");
scanf("%d",&b);
if(a == 1) point = foo;
if(a == 2) point = foo2;
printf("\n\t%d",point(b));
return 0;
}
#include<stdio.h>
int foo(int b)
{ return b + 2; }
int foo2(int b)
{ return b - 2; }
int main()
{
int (*point)(int);
int a=0, b=0;
printf("\n%","Select a value 1 or 2");
printf("\n%s","1 = (a + 2), 2 = (a - 2) : ");
scanf("%d",&a);
if(a<1 || a>2) exit(0);
printf("\n%s","select a value : ");
scanf("%d",&b);
if(a == 1) point = foo;
if(a == 2) point = foo2;
printf("\n\t%d",point(b));
return 0;
}
if(a == (1 || 2)) // сначало будет выполненно то что в скобках. Иначе говоря a всегда будет сравниваться с 1, я полагаю вы хотели сделать как то так:
if(a == 1 || a == 2) // что означает если а равно или 1 или 2
========================================
У вас есть переменная типа int с и она не является указателем...
Полагается что вы хотели испольховать указатель чтобы он указывал на функцию...
типо что то вроде этого:
int (*c)(int); // указатель на любую функцию имеющие схожую архитектуру
c = foo;
c(5); // вызываем функцию..
if(a == 1 || a == 2) // что означает если а равно или 1 или 2
========================================
У вас есть переменная типа int с и она не является указателем...
Полагается что вы хотели испольховать указатель чтобы он указывал на функцию...
типо что то вроде этого:
int (*c)(int); // указатель на любую функцию имеющие схожую архитектуру
c = foo;
c(5); // вызываем функцию..
Валера Гаврусев
с вами спорить не имеет смысла, так как вы гораздо больше знайте меня в программировании, но я хотел поступить так:
функцию foo прировнять к указателю c, а потом этот указатель ( c ) указать на другой указатель (point).
функцию foo прировнять к указателю c, а потом этот указатель ( c ) указать на другой указатель (point).
Валера Гаврусев
а дальше, с помощью указателя ptr передать параметры в функцию.
Данияр Есмухамбетов
Просто для примера. Так-то тело функции можно прямо лямбдой писать в main, не описывая их даже отдельно.
https://www.ideone.com/YV2mex
Введете 1 - вызовется testPlus иначе testMinus.
https://www.ideone.com/YV2mex
Введете 1 - вызовется testPlus иначе testMinus.
int(*point)(int);
//point = c; // что вообще за присваивание указателю значение типа int?
//point = c; // что вообще за присваивание указателю значение типа int?
Валера Гаврусев
функцию foo прировнять к указателю c, а потом этот указатель ( c ) указать на другой указатель (point).
Похожие вопросы
- C/C++ Как устроена память, выделенная для структуры с указателем *next?
- Не совсем понял как работает C++ код с указателями
- Передача в метод класса указателя на функцию C++
- Читаю книжку по C, помогите с указателями
- Распечатать слова данного текста в обратном порядке c++ Надо переделать с помощью указателей
- Что значит указатель константа на C++?
- Различие указателей int *; и char *;
- Если указатель уже объявлен как указатель то при повторном объявлении мы обращаемся не к указателю а к адресу ссылки?
- Я не представляю, как можно в 21-ом веке писать на C++, в котором нет сборщика мусора и есть такой геммор, как указатели
- C++. Указатели на функции