им пытаются несколько примеров в книге (с ++ грунтовку Липпманом) и им пытаются узнать о функциональных указателейфункция параметра указатель с типом псевдоним
этот код:
#include <iostream>
void useBigger (const std::string &s1, const std::string &s2,
bool (*func)(const std::string &, const std::string &))
{
bool valid = func (s1, s2);
std::cout << __func__ << " is called "
<< valid <<std::endl;
}
bool lengthCompare (const std::string &s1, const std::string &s2)
{
if (s1.size() > s2.size())
return true;
else
return false;
}
int main()
{
useBigger ("hello", "sample", lengthCompare);
return 0;
}
этот код просто прекрасно работает но когда я попробовать использовать псевдоним типа, такие как ЬурейеЕ
#include <iostream>
typedef bool func (const std::string &, const std::string &); /// or typedef bool (*func)(const std::string &, const std::string);
void useBigger (const std::string &s1, const std::string &s2,
func)
{
bool valid = func (s1, s2);
std::cout << __func__ << " is called "
<< valid <<std::endl;
}
bool lengthCompare (const std::string &s1, const std::string &s2)
{
if (s1.size() > s2.size())
return true;
else
return false;
}
int main()
{
useBigger ("hello", "hiiiii", lengthCompare);
return 0;
}
он продуцирует что-то ошибки, как это:
error: expression list treated as compound expression in functional cast [-fpermissive]
«этот код просто отлично работает» - um no it not. Вы никогда не закрывали список параметров вашей функции. Вам не хватает ')'. – WhozCraig