Wywołujesz metodę obiektu na “b”, a b to klasa. Albo metoda func miała być statyczna, ale chciałeś utworzyć obiekt klasy b i na nim wywołać niestatyczną metodę.
#include
using namespace std;
class a{
public:
int liczba1;
};
class b: public a{
public:
void func(){
liczba1=1;
cout << liczba1 << endl;
}
};
int main(){
b obiekt;
obiekt.func();
system("PAUSE");
return 0;
}
Aby przekazać do funkcji wskaźnik do metody z innej klasy w ten sposób:
glutReshapeFunc(&okno::ReSizeGLScene);
to prototyp funkcji musiałby wyglądać np. tak:
void glutReshapeFunc(void (okno::*funkcja)());
Żeby teraz uruchomić w funkcji glutReshapeFunc funkcję przekazaną przez parametr, to musi być w niej widoczny obiekt klasy, z której pochodzi nowa funkcja:
error: cannot convert 'Sterowanie**' to 'void (*)(unsigned char, int, int)' for argument '1' to 'void glutKeyboardFunc(void (*)(unsigned char, int, int))'
glutKeyboardFunc przyjmuje jeden argument - wskaźnik na funkcję, takiego typu: void (*)(unsigned char, int, int)
Ty natomiast próbujesz tam przekazać wskaźnik na wskaźnik do obiektu typu Sterowanie, co jest bez sensu i kompilator mówi Ci, że nie może skonwertować ‘wskaźnik na wskaźnik’ na ‘wskaźnik na funkcję …’.
Widzę jednak, że masz funkcję o takim typie - keyPressed. Nie chodziło Ci więc o glutKeyboardFunc(&keyPressed) ?
Funkcja glutKeyboardFunc przyjmuje funkcję. Podałeś, że masz funkcję o takich parametrach i typie zwracanym - keyPressed - więc domyślam się, że to właśnie ją chciałeś przekazać - co zasugerowałem.
Nie jestem w stanie, musiałbyś dać więcej Twojego kodu i jakoś go opisać. Postaram się napisać prosto w punktach co chciałem przekazać:
Masz funkcję void glutKeyboardFunc(void (*)(unsigned char, int, int)) - jak widać, trzeba jej przekazać wskaźnik na funkcję: void (*)(unsigned char, int, int)
Próbowałeś przekazać tam wskaźnik na wskaźnik na obiekt klasy Sterowanie, co oczywiście nie ma prawa zadziałać
Napisałeś, że masz funkcję void keyPressed(unsigned char key, int x, int y)
Jest ona dokładnie typu, który przyjmuje glutKeyboardFunc, więc _domyślam_się_, że to ją chciałeś przekazać (ale nie ja piszę ten kod, to Ty powinieneś wiedzieć co chcesz zrobić)
Nie w tym jest problem. Problemem jest “static”. Otóż można mieć pole statyczne i zainicjalizowane.
#include
using namespace std;
class A {
public:
static int liczba;
};
int A::liczba = 0;
class B : public A {
public:
static void func1() {
liczba = 1;
}
void func2() {
liczba = 2;
}
};
int main() {
B::func1();
cout << A::liczba << endl;
B b;
b.func2();
cout << A::liczba << endl;
return 0;
}