Mam program w C++C++. Błąd: void nie jest wskaźnikiem do obiektu typu
struct arguments
{
int a, b, c;
arguments(): a(3), b(6), c(9) {}
};
class test_class{
public:
void *member_func(void *args){
arguments vars = (arguments *) (*args); //error: void is not a
//pointer-to-object type
std::cout << "\n" << vars.a << "\t" << vars.b << "\t" << vars.c << "\n";
}
};
Na kompilacji wyrzuca błąd:
error: ‘void*’ is not a pointer-to-object type
Może ktoś wyjaśnić, co robię źle wytworzyć ten błąd?
Tak, jest. Czy próbowałeś podać 'args' innym typom danych? – Blender
Nie masz żadnych "abstrakcyjnych typów" (zakładam, że masz na myśli abstrakcyjne klasy bazowe) w tym przykładzie. Prawdopodobnie masz na myśli '* (argumenty *) args', które rzuca' args' z 'void *' na 'arguments *', następnie je dereferencje. Twój obecny kod próbuje dereferencji "void *" (co jest nielegalne), a następnie przesyła wartość dereferencji do 'arguments *', co prawie na pewno nie jest tym, co zamierzałeś. –
@ Chr. Tak, właśnie to chciałem zrobić, dziękuję za wyjaśnienia. Btw, myślałem, że klasy i klasy zostały uznane za typy abstrakcyjne, podczas gdy np. int, float nie są abstrakcyjne. –