C/C++

Проблема с указателем в C++

Добрый день. Я новичок в 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;
}
У тебя путаница с переменными
int c; // переменная типа int
int(*c)(int) // переменная типа "указатель на функцию". Имя то же самое.
Переменная, объявленная в блоке { }, существует только внутри этого блока.

Присваивание, вызывающее ошибку:
point = c;
Справа int, слева указатель на функцию. Разные, несовместимые типы данных.
B*
Bagdat *********
58 065
Лучший ответ
Валера Гаврусев не в этом дело, я убрал переменную ( c ) и ничего не произошлою
if(a == (1 || 2)) ??
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;
}
if(a == (1 || 2)) // сначало будет выполненно то что в скобках. Иначе говоря a всегда будет сравниваться с 1, я полагаю вы хотели сделать как то так:
if(a == 1 || a == 2) // что означает если а равно или 1 или 2
========================================
У вас есть переменная типа int с и она не является указателем...
Полагается что вы хотели испольховать указатель чтобы он указывал на функцию...
типо что то вроде этого:
int (*c)(int); // указатель на любую функцию имеющие схожую архитектуру

c = foo;

c(5); // вызываем функцию..
AT
Antоn Taranenkо*
10 755
Валера Гаврусев с вами спорить не имеет смысла, так как вы гораздо больше знайте меня в программировании, но я хотел поступить так:
функцию foo прировнять к указателю c, а потом этот указатель ( c ) указать на другой указатель (point).
Валера Гаврусев а дальше, с помощью указателя ptr передать параметры в функцию.
Данияр Есмухамбетов Просто для примера. Так-то тело функции можно прямо лямбдой писать в main, не описывая их даже отдельно.

https://www.ideone.com/YV2mex

Введете 1 - вызовется testPlus иначе testMinus.
int(*point)(int);
//point = c; // что вообще за присваивание указателю значение типа int?
Валера Гаврусев функцию foo прировнять к указателю c, а потом этот указатель ( c ) указать на другой указатель (point).