Для начала вы не можете вызывать непостоянную функцию-член из постоянной функции-члена. Таким образом, функция должна быть объявлена как минимум как
void recursiveMember(ListNode *aList, double var) const;
Во-вторых, закрытая функция-член принимает в качестве аргумента указатель на головной узел, так как она должна быть объявлена как stati c функция-член
static void recursiveMember(ListNode *aList, double var);
И в-третьих, обе функции private и publi c не должны выводить никаких сообщений. Вызывающая функция решает, выводить ли что-нибудь. Функция должна возвращать логическое значение.
Таким образом, первая функция должна быть объявлена как
bool recursiveMember( double var ) const
{
return recursiveMember( head, var);
}
, а вторая функция должна быть объявлена как
static bool recursiveMember( const ListNode *aList, double var);
Далее, Если текущее значение указателя aList
равно nullptr
, тем не менее, вы пытаетесь использовать его для доступа к памяти во втором операторе if
if(var != aList->x)
{recursiveMember(aList->next, var);}
То есть, нет возврата из функции в случай, когда aList
равен nullptr
.
if(aList == nullptr)
{cout << var << " is not in the list" << endl;}
Функция должна быть определена следующим образом
static bool recursiveMember( const ListNode *aList, double var )
{
if ( aList == nullptr )
{
return false;
}
else if ( a:ist->var != var )
{
return recursiveMember( aList->next, var );
}
else
{
return true;
}
}
И в основном вы должны проверить возвращаемое значение Вызвать функцию и вывести соответствующее сообщение.
Обратите внимание на то, что в конструкторе вы используете локальную переменную x вместо члена данных x
ListNode(double v1, ListNode *n1 = nullptr) {
double x = v1;
next = n1;}
Должно быть
ListNode(double v1, ListNode *n1 = nullptr) {
x = v1;
next = n1;}