Некоторые делают по одному .h / .cpp на класс:
my.h
#ifndef MY_H
#define MY_H
#include "other.h"
class MyClass
{
public:
void MyMethod();
OtherClass test;
}
#endif // MY_H
other.h
#ifndef OTHER_H
#define OTHER_H
class OtherClass
{
public:
void Othermethod();
}
#endif // OTHER_H
my.cpp
#include "my.h"
void MyClass::MyMethod() { }
other.cpp
#include "other.h"
#include "my.h"
void OtherClass::OtherMethod)()
{
// (ab)using MyClass...
}
Если вы используете только Visual Studio, вы можете использовать #pragma once
вместо #ifndef xx_h #define xx_h #endif // xx_h
.РЕДАКТИРОВАТЬ: как говорится в комментарии, а также соответствующая страница Википедии , #pragma once
также поддерживается (по крайней мере) GCC.
ОБНОВЛЕНИЕ: Об обновленном вопросе, не связанном с #include, но подробнее о передаче объектов вокруг ...
В MyClass уже есть встроенный экземпляр OtherClass, test
.Итак, в MyMethod это, вероятно, больше похоже на:
void MyClass::MyMethod()
{
test.OtherMethod();
}
И если OtherMethod требуется доступ к экземпляру MyClass, передайте этот экземпляр в OtherMethod в качестве ссылки или указателя:
Byссылка
class OtherClass { public: void OtherMethod(MyClass &parent); }
void MyClass::MyMethod() { test.OtherMethod(*this); }
void OtherClass::OtherMethod(MyClass &parent)
{
parent.AnotherMethod();
}
По указателю
class OtherClass { public: void OtherMethod(MyClass *parent); }
void MyClass::MyMethod() { test.OtherMethod(this); }
void OtherClass::OtherMethod(MyClass *parent)
{
if (parent == NULL) return; // or any other kind of assert
parent->AnotherMethod();
}