C++ Can';t从.cpp访问在.h中声明的私有成员

C++ Can';t从.cpp访问在.h中声明的私有成员,c++,qt,private-members,C++,Qt,Private Members,我已经声明了一个私有变量MainWindow MainWindow在controller.h中 但我无法从controller.cpp访问它 控制器.h #ifndef CONTROLLER_H #define CONTROLLER_H #include <QMainWindow> #include "event_manager.h" #include "event_wrapper.h" #include "event_list_viewer.h" #include "main_w

我已经声明了一个私有变量
MainWindow MainWindow在controller.h中
但我无法从controller.cpp访问它

控制器.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

为什么?

因为
MainWindow*SetupMainWindow()
是一个全局/独立函数,而不是
控制器
类的成员。您必须在Controller.cpp中将成员函数声明为
MainWindow*Controller::SetupMainWindow()

谢谢!我来自Java编程,所以我不知道这个区别,但现在我没事了;)
#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);
}