2014-09-30 2 views
0

Мне нужно вызвать функцию из разных аргументов из другой функции.Функция вызова из аргумента другой функции

class LST { 
public: 
    char *value; 
    LST *Next; 
}; 
bool Is_Even(LST *el) { 
    return true; 
}  
void For_Each_el(LST *&el, bool f) { 
    LST *H = el; 
    while (H) { 
    if (f(H)) //this line causes the error 
     Current = H; 
    H = H->Next; 
    } 
} 

Здесь ошибка:

error C2064: the result of evaluating the fragment is not a function that takes one argument 

(в переводе с русского)

Таким образом, этот код не работает.

Вот как я это называю в main() функции:

int main() { 
    Head = new LST; 
    Head->value = "4"; 
    For_Each_el(Head, Is_Even(Head)); 
    _getch(); 
} 
+1

'bool f' является булевым параметром с именем' f'. Вы вызываете его так, как будто это указатель на функцию. Также обратите внимание: у вас нет/показать конструктор, поэтому вы не можете ожидать, что 'Next' будет инициализирован на' nullptr', и если вы хотите, чтобы 'value' являлось строкой, используйте' std :: string' , – crashmstr

+0

@ GALIAF95 Ваш код на C++ очень похож на код C. Возможно, книга или учебник были бы хорошей идеей. – Biffen

ответ

0

Во-первых, создать ЬурейеЕ к функции указателя:

typedef bool(*test_LST)(LST*); 

Затем измените подпись вашего для каждой функции:

void For_Each_el(LST *&el, test_LST f) 

окончательно измените, как вы это называете:

For_Each_el(Head, Is_Even); 

Можно также использовать typedef std::function<bool(LST*)> test_LST; вместо указанных выше ЬурейеГо для обеспечения объекта функции для каждой итерации-, или написать For_Each_el как template функции.

+0

Спасибо ВАМ !!!!!! – GALIAF95

Смежные вопросы