Как получить доступ к переменным-членам внутри переопределенной функции базового класса?
//Overridden base class function
void handleNotification(s3eKey key){
//Member variable of this class
keyPressed = true; //Compiler thinks this is undeclared.
}
Complier жалуется, что keyPressed не объявлено. Единственный способ выяснить, как получить к нему доступ — объявить keyPressed как открытую статическую переменную, а затем использовать что-то вроде:
ThisClass::keyPressed = true;
Что я делаю неправильно?
// Добавлены детали ———————————————- ————-
ThisClass.h:
include "BaseClass.h"
class ThisClass: public BaseClass {
private:
bool keyPressed;
};
ThisClass.cpp:
include "ThisClass.h"
//Overridden BaseClass function
void handleNotification(s3eKey key){
//Member variable of ThisClass
keyPressed = true; //Compiler thinks this is undeclared.
}
BaseClass.h:
class BaseClass{
public:
virtual void handleNotification(s3eKey key);
};
BaseClass.cpp
include 'BaseClass.h"
void BaseClass::handleNotification(s3eKey key) {
}
Правильный способ переопределения функции заключается в следующем.
class base {
protected:
int some_data;
virtual void some_func(int);
public:
void func(int x) { some_func(x); }
};
void base::some_func(int x)
{ /* definition, may be in some source file. */ }
class derived : public base
{
protected:
virtual void some_func(int); // this is not base::some_func() !
};
void derived::some_func(int x)
{
some_data = x; // example implementation, may be in some source file
}
редактировать Обратите внимание, что base::some_func()
а также derived::some_func()
две разные функции, причем последние имеют приоритет над первым.
Этот метод определен вне определения класса? Другими словами, ваш код структурирован так:
class ThisClass {
...
};
// method defined outside of the scope of ThisClass declaration, potentially
// in a completely different file
void handleNotification(s3eKey key) {
....
}
Если это так, вам нужно объявить метод следующим образом:
void ThisClass::handleNotification(s3eKey key){
keyPresssed = true;
}
В противном случае компилятор не будет знать, что handleNotification()
Реализуемый метод является тот, который принадлежит ThisClass
, Скорее, он будет предполагать, что это не часть ThisClass
реализации, поэтому он не будет иметь автоматического доступа к ThisClass
переменные.