Я пробую несколько случайных объявлений указателей массива и указателей функций вместе. Я был поражен здесь.
#include<bits/stdc++.h>
int add(int a,int b){
return 1729; }
int main(){
int (abc)(int,int);
abc = add;
return 0;
}
Выдается ошибка:
cannot convert 'int(int, int)' to 'int(int, int)' in assignment
Но поскольку и abc
, и add
относятся к одному типу, почему он должен конвертироваться? Или можно присвоить функции новым переменным? Если да, то как это сделать?
Не имеет отношения к вашей проблеме, но прочтите Почему я не должен #include <bits/stdc++.h>?
Вам нужно int (*abc)(int,int);
, чтобы abc
был указатель функции соответствующего типа.
Что касается вашей проблемы, когда вы спрашиваете об ошибках сборки, всегда копируйте и вставляйте (в виде текста) полный и полный вывод ошибки в тело вопроса. Могут быть детали, которые вы упустите, если перепишете лишь небольшую часть сообщения.
lvalue required as left operand of assignment
. Вы не можете назначить функцию другой функции
Наконец, в C++ я настоятельно рекомендую избегать указателей на функции. Если вам нужен вызываемый объект, используйте вместо него std::function
.
@Someprogrammerdude, с std::function
вы платите за стирание типа, с указателем на функцию - нет.
int (abc)(int,int);
Это не указатель на функцию. Дополнительные скобки в этом случае не имеют значения, и это эквивалентно
int abc(int,int);
Это функция декларация, которую C++ позволяет размещать практически в любом месте (например, в теле другой функции). Ваш код не компилируется, потому что вы пытаетесь присвоить одно имя функции другому.
Чтобы получить указатель, вам нужен синтаксис указателя
int (*abc)(int,int);
Где на этот раз нужны скобки являются, иначе вы получите объявление функции с возвращаемым типом int*
! И теперь задание будет правильно оформлено.
Возможный дубликат Как работают указатели функций в C?