Podczas robienia zadania natchnąłem się na problem ze wskaźnikiem funkcji nie wiem dlaczego nie dzieła i jaki jest w tym zawarty błąd:
plik nagłówkowy:
#ifndef LIST_H_
#define LIST_H_
typedef int Item;
class List
{
private:
enum { Max = 10 };
Item items[Max];
int top=0;
public:
List();
bool isempty() const;
void * up_value_top (Item & item);
void visit(void (*do_something) (Item &));
};
#endif
main:
#include "list.h"
#include <iostream>
#include <cctype>
List::List() { top=0; }
bool List::isempty() const { return top == 0; }
void * List::up_value_top (Item & item) {
bool one = true;
bool zero = false;
if(top < Max)
{ items[top++] = item;
std::cout << one << std::endl;
}
else
std::cout << zero << std::endl;}
void List::visit(void (*do_something) (Item & item)) // ???
{ for(int i=0; i<Max; i++)
std::cout << top++ << " element listy: " << items[i] << std::endl;
}
int main()
{
List check_list;
int number;
char letter;
std::cout << "Sprawdzanie list, wybierz opcje:\n1. Dodaj element\n2. Zawartość listy\n3. Koniec sprawdzania\n\n";
while(std::cin >> letter && isalpha(letter))
{
switch(letter)
{
case '1':
check_list.up_value_top(number);
check_list.visit(check_list.up_value_top(number));
break;
case '2':
if(check_list.isempty())
std::cout << "Stos pusty!\n";
else
check_list.visit(up_value_top(number));
break;
case '3':
break;
}//switch
}//while
std::cout << "Zakończenie programu\n";
}//main
Błędy (próbowałem poprawiać, ale tworzą się nowe)
list.cpp:35:45: error: invalid conversion from ‘void*’ to ‘void (*)(Item&) {aka void (*)(int&)}’ [-fpermissive]
check_list.visit(check_list.up_value_top(number));
~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
list.cpp:18:6: note: initializing argument 1 of ‘void List::visit(void (*)(Item&))’
void List::visit(void (*do_something) (Item & item)) // ???
^~~~
list.cpp:41:23: error: ‘up_value_top’ was not declared in this scope
check_list.visit(up_value_top(number));