C++中如何将类的私有成员函数拆分到不同文件?
解决C++ wxFrame派生类私有成员函数拆分报错问题
你遇到的核心问题是:其他cpp文件无法访问main.cpp里的MyFrame类定义,C++编译时每个cpp是独立编译单元,BusFunctions.cpp和CarFunctions.cpp编译时不知道MyFrame的结构,自然无法识别这些成员函数的归属。
修复步骤:
把MyFrame类定义移到头文件
创建MyFrame.h,把类定义放进去,加上头文件保护避免重复包含:#ifndef MYFRAME_H #define MYFRAME_H #include <wx/wx.h> class MyFrame : public wxFrame{ public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); private: void Carfunc(); void Busfunc1(); void Busfunc2(); void Busfunc3(); }; #endif // MYFRAME_H修改main.cpp,包含头文件并实现构造函数
移除main.cpp里的类定义,换成包含头文件,同时补全构造函数的实现:#include "MyFrame.h" // 实现MyFrame构造函数 MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(nullptr, wxID_ANY, title, pos, size) { // 这里写构造函数的初始化逻辑,比如创建控件等 } // 这里可以继续写wxApp的定义等程序入口代码给每个函数实现文件添加头文件包含
BusFunctions.cpp修改后:#include "MyFrame.h" void MyFrame::Busfunc1(){ // do stuff here } void MyFrame::Busfunc2(){ // do stuff here } void MyFrame::Busfunc3(){ // do stuff here }CarFunctions.cpp修改后:
#include "MyFrame.h" void MyFrame::Carfunc(){ // do stuff here }
关键说明:
- 头文件的作用就是让多个编译单元共享类、函数的声明,必须把类定义放在头文件里,才能让所有需要实现成员函数的cpp文件识别类结构。
- 头文件保护(
#ifndef/#define/#endif)是必须的,防止多次包含导致类重复定义错误。 - 原来的类定义没有闭合
},这也是编译报错的原因之一,现在已经在头文件里补全。
内容的提问来源于stack exchange,提问作者Pal
相关产品推荐
相关产品推荐

