【问题标题】:Not sure how to split up different categories of functions into different files | C++不知道如何将不同类别的函数拆分到不同的文件中 | C++
【发布时间】:2022-11-10 01:48:17
【问题描述】:

我已经编写这个应用程序很长一段时间了,并且有这么多的功能,我一直试图避免聚集在一个代码块中。

我对 C++ 比较陌生,我想我了解头文件以及如何正确使用它们。但是我遇到了一个稍微复杂的问题,它涉及私有类。每当我尝试将这些函数放在不同的文件中并为它们制作标题时,我都会遇到很多错误。我想将 wxFrame 类保留在 main.cpp 文件中,但我还需要在文件外部定义其中的函数。我真的可以使用一些帮助。

主文件


class MyFrame : public wxFrame{
    public:
        MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
        
        

    private:
        void Carfunc();

        void Busfunc1(); 
        void Busfunc2(); 
        void Busfunc3(); 


总线函数.cpp

void MyFrame::Busfunc1(){
// do stuff here
}

void MyFrame::Busfunc2(){
// do stuff here
}

void MyFrame::Busfunc3(){
// do stuff here
}

CarFunctions.cpp

void MyFrame::Carfunc(){
// do stuff here
}


【问题讨论】:

  • 你快要提出一个问题了......但是......它到底是什么?
  • 您需要将 class MyFrame : public wxFrame{ ... }; 放在您的 cpp 文件包含的标头中。您不能在 main.cpp 中使用它并在其他 cpp 文件中使用它。请记住,您包括头文件,但不包括 .cpp 文件。
  • 你得到什么错误? Edit 您的问题与您收到的确切错误消息。
  • 为什么你想在main.cpp 中保留MyFrame 的定义吗?
  • 也许你想要一个 class Bus { ...};和类汽车 { ...};而不是将所有代码放在 MyFrame / GUI 类中。

标签: c++ wxwidgets


【解决方案1】:

有很多方法可以做到。 一种是在 Bus 和 Car 类中定义这些方法(函数)。

然后Busfunc1()MyFrame 例如可以做return bus.func1()
Busfunc2()MyFrame 可以做return bus.func2()
Carfunc()MyFrame 可以做return car.func()
等等...
或者您可以简单地将 MyFrame 上的汽车和公共汽车公开。所以 MyFrame 有一辆汽车,而那辆汽车有 Carfunc() 代替。 MyFrame 也有一个总线,并且那个总线有所有的 busfuncs 而不是 MyFrame。

至少有 4-5 种其他方法可以做到这一点,包括静态方法、继承……它们最终都会将你的代码组织在不同的文件中。这完全取决于您要达到的目标。真正的要求是什么?当然,一般来说组织代码总是好的,但什么是 Busfunc2? Carfunc到底是什么?

【讨论】:

    【解决方案2】:

    不要将类声明放在main.cpp
    当你这样做时CarFunctions.cpp 不知道类MyFrame 存在(与 BusFunctions.cpp 相同),编译器会抱怨!

    相反,我建议坚持共同约定,并且:

    1. 为类MyFrame 的声明创建一个名为MyFrame.hpp 的头文件。

    2. 创建一个源文件MyFrame.cpp 并将所有实现放在那里。

      如果你坚持拆分同一个类的实现,那么 创建类似MyFrame_Car.cppMyFrame_Bus.cpp 的东西

      1. #include "MyFrame.hpp" 添加到任何需要MyFrame 的模块
        (MyFrame.cpp 也需要它们)

      2. 将所有模块(cpp 文件)链接在一起。

      // MyFrame.hpp
      class MyFrame : public wxFrame{
          public:
              MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
              
              
      
          private:
              void Carfunc();
      
              void Busfunc1(); 
              void Busfunc2(); 
              void Busfunc3(); 
      ...
      ...
      }
      
      // MyFrame_Bus.cpp
      void MyFrame::Busfunc1(){
      // do stuff here
      }
      
      void MyFrame::Busfunc2(){
      // do stuff here
      }
      
      void MyFrame::Busfunc3(){
      // do stuff here
      }
      
      // MyFrame_Car.cpp
      void MyFrame::Carfunc(){
      // do stuff here
      }
      
      

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      相关资源
      最近更新 更多