如何在包含的类之外执行功能

时间:2019-06-04 06:35:53

标签: c++ function class

我把两个类分成四个文件。主类包括一个子类,需要执行其功能(最小示例代码中未显示)。我要做的是在子类范围内执行主类的功能。

我认为有些想法是继承子类中的函数,但我不知道该怎么做。

MainClass.cpp

xdebug_start_function_monitor( array $list_of_functions_to_monitor )

MainClass.hpp

#include "MainClass.hpp"

void MainClass::mainCallback() {
  std::cout << "[mainCallback] executed" << std::endl;
}

void MainClass::subCallback() {
  std::cout << "[subCallback] executed" << std::endl;
}

int main() {

  MainClass mainClass;
  mainClass.mainCallback();

  SubClass subClass;
  subClass.activateSubClass();

  return 0;
}

SubClass.cpp

#pragma once

#include "SubClass.hpp"
#include <iostream>

class MainClass{
 public:
  void mainCallback();
  void subCallback();
};

SubClass.hpp

#include "SubClass.hpp"

void SubClass::activateSubClass(){
 mainClass.subCallback(); //TODO call this function from this scope
}

SubClass.cpp中的错误当然是: 错误:使用未声明的标识符'mainClass'

2 个答案:

答案 0 :(得分:0)

只需将子类作为子类:

class SubClass: public MainClass {
 public:
  void activateSubClass();
};

子类的这种(公共)方式可在子类实例中调用MainClass的所有方法。您也可以私有继承。这样,只有activateSubClass()才能被调用。

在activateSubClass中,您可以直接调用父类的方法:

void SubClass::activateSubClass(){
 mainClass.subCallback(); //TODO call this function from this scope
}

不要忘记在SubClass.hpp中包含MainClass.hpp

答案 1 :(得分:0)

您尝试在没有MainClass.subCallback()实例的情况下调用MainClass。据我说,这是static方法的典型用例。

然后,我认为您以错误的方式创建了#include指令。确实,MainClass似乎不需要知道SubClass,但事实恰恰相反。我认为最好将MainClass.hpp包含在SubClass.hpp中。这样可以解决您的圈子依赖问题。
您可以在另一个文件中编写main()函数。


编辑:示例

MainClass.hpp

#pragma once
class MainClass
{
   public:
      void mainCallback();
      static void subCallback(); // mak it static to be able to call it without an instance of the class
};

MainClass.cpp

#include "MainClass.hpp"
#include <iostream>

void MainClass::mainCallback()
{
   std::cout << "[mainCallback] executed" << std::endl;
}
void MainClass::subCallback()
{
   std::cout << "[subCallback] executed" << std::endl;
}

SubClass.hpp

#pragma once
class SubClass
{
   public:
      void activateSubClass();
};

SubClass.cpp

#include "SubClass.hpp"
#include "MainClass.hpp" // MainClass inclusion

void Suclass::activateSubClass()
{
   MainClass::subCallback(); // Call of the static method
}

main.cpp

#include "MainClass.hpp"
#include "SubClass.hpp"

int main()
{
   MainClass mc;
   mc.mainCallback();

   SubClass sc;
   sc.activateSubClass(); // Will call MainClass::subCallback()

   return 0;
}

希望它能对您有所帮助。