시뮬레이션 프로그램을 설정하려고합니다. 시뮬레이션은 여러 단계로 실행되며 시뮬레이션 클래스는 여러 클래스의 :: step()을 호출해야하며, 그 중 하나는 _experiment 클래스입니다.순환 종속 클래스의 멤버 호출 방법
나는 실험 클래스는 시뮬레이션 클래스를 필요로하고 시뮬레이션 클래스는 실험 클래스가 무엇인지 알 필요가 있기 때문에이이 동작하지 않습니다, 그래서 그들은 따라 순환한다. 나는 forward 선언문을 사용하여 그것을 해결하려고 노력했지만, 앞으로 선언 된 클래스의 메소드에 접근 할 수 없다. 그렇다면 앞으로 선언 할 시점은 무엇입니까? 누구든지 나를 도울 수 있습니까? 감사!
MAIN.CPP
int main()
{
_experiment experiment;
}
experiment.cpp :
#include "experiment.h"
_experiment::experiment()
{
_simulation simulation;
simulation.experiment = this;
simulation.start();
}
void _experiment::step()
{
//Apply forces to simulation
}
experiment.h :
#include "simulation.h"
class _experiment {
public:
void step()
};
simulation.cpp :
#include "simulation.h"
void _simulation::run()
{
//Run simulation for 1000 steps
for(int i = 0; i < 1000; i++)
{
experiment->step() //Calculate forces. Doesnt work (cant use member functions of forward declared classes. How to work around this?
//Calculate motion
}
}
,
simulation.h :
class _experiment; //Forward declaration
class _simulation {
public:
_experiment* experiment
void run();
};
따라서 헤더에 헤더가 사용하는 모든 것을 cpp가 사용하는 모든 것을 선언/포함해야합니다. "experiment.h"를 "experiment.cpp"에 포함시키고 "experiment.h"에 #include "simulation.h"를 쓰면 "simulation.h"가 "experiment.cpp"에 포함될 것이라고 생각했습니다. 역시. 나는 당신이 말했듯이 해냈어. 지금은 고마워! – user1092682
하나의 헤더가 다른 헤더에 의존한다는 지식에 의존하기보다는 소스가 필요한 모든 것을 포함하는 것이 가장 좋습니다. 그 종속성은 미래에 변할 수 있으며 꼭 필요한 경우가 아니라면 헤더가 다른 헤더를 포함하지 않는 것이 가장 좋습니다. –