无法从 .cpp 访问 .h 中声明的私有成员
Can't access private member declared in .h from .cpp
我在controller.h中声明了一个私有变量MainWindow mainWindow;
但我无法从 controller.cpp
访问它
controller.h
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include <QMainWindow>
#include "event_manager.h"
#include "event_wrapper.h"
#include "event_list_viewer.h"
#include "main_window.h"
class Controller
{
public:
Controller();
~Controller();
static Controller &GetInstance();
MainWindow *SetupMainWindow();
private:
MainWindow mainWindow;
};
#endif // CONTROLLER_H
controller.cpp
#include "controller.h"
Controller::Controller() {}
Controller::~Controller() {}
Controller& Controller::GetInstance()
{
static Controller instance;
return instance;
}
MainWindow* SetupMainWindow()
{
bbque::EventManager *manager = &bbque::EventManager::GetInstance();
bbque::EventWrapper *wrapper = manager->Deserialize(); //get wrapper via manager
EventListViewer eventViewer;
wrapper->setParent(&eventViewer);
eventViewer = EventListViewer(wrapper, mainWindow); //cannot access mainWindow variable
return new MainWindow(eventViewer);
}
为什么?
因为 MainWindow* SetupMainWindow()
是一个 global/standalone 函数,而不是 Controller
class 的成员。您必须在 controller.cpp.
中将成员函数声明为 MainWindow* Controller::SetupMainWindow()
我在controller.h中声明了一个私有变量MainWindow mainWindow;
但我无法从 controller.cpp
controller.h
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include <QMainWindow>
#include "event_manager.h"
#include "event_wrapper.h"
#include "event_list_viewer.h"
#include "main_window.h"
class Controller
{
public:
Controller();
~Controller();
static Controller &GetInstance();
MainWindow *SetupMainWindow();
private:
MainWindow mainWindow;
};
#endif // CONTROLLER_H
controller.cpp
#include "controller.h"
Controller::Controller() {}
Controller::~Controller() {}
Controller& Controller::GetInstance()
{
static Controller instance;
return instance;
}
MainWindow* SetupMainWindow()
{
bbque::EventManager *manager = &bbque::EventManager::GetInstance();
bbque::EventWrapper *wrapper = manager->Deserialize(); //get wrapper via manager
EventListViewer eventViewer;
wrapper->setParent(&eventViewer);
eventViewer = EventListViewer(wrapper, mainWindow); //cannot access mainWindow variable
return new MainWindow(eventViewer);
}
为什么?
因为 MainWindow* SetupMainWindow()
是一个 global/standalone 函数,而不是 Controller
class 的成员。您必须在 controller.cpp.
MainWindow* Controller::SetupMainWindow()