我把两个类分成四个文件。主类包括一个子类,需要执行其功能(最小示例代码中未显示)。我要做的是在子类范围内执行主类的功能。
我认为有些想法是继承子类中的函数,但我不知道该怎么做。
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'
答案 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;
}
希望它能对您有所帮助。