3
기본 엔티티/개체 관리 시스템을 설정하려고하는데 두 클래스가 있습니다. 하나는 상속 할 엔터티의 기본 클래스이고 다른 하나는 관리하고 제어하는 클래스입니다. 순환 의존성이있는 C++ 클래스는 어떻게 정의합니까?
이
내가 사용하려고 해요 소스 코드입니다#include <iostream>
#define MAX_ENTS 400
class EFentity;
class EFiterator;
class EFentity {
public:
EFentity();
virtual bool step();
virtual void create(EFiterator*,int);
virtual void destroy();
private:
int holder_id;
EFiterator* holder;
};
EFentity::EFentity(void) {
// add base entity stuff
}
void EFentity::destroy() {
holder->ents[holder_id]=NULL;
std::cout << "destroying object id "<<holder_id;
delete this;
}
void EFentity::create(EFiterator* h,int pos) {
holder=h;
holder_id=pos;
}
bool EFentity::step() {
return false;
}
class EFiterator {
public:
EFentity* ents[MAX_ENTS];
int e_size;
EFiterator();
void push(EFentity* e);
void update();
};
EFiterator::EFiterator() {
e_size=0;
}
void EFiterator::update() {
for(int i=0;i<e_size;i++) {
if (!ents[i]->step()) {
std::cout << "entity id "<< i<<" generated a fault!\n";
} else std::cout << "entity id "<<i<<" passed step test.\n";
}
}
void EFiterator::push(EFentity* e) {
ents[e_size]=e;
e->create(this,e_size++);
}
int main() {
EFiterator main_iterator;
main_iterator.push(new EFentity());
main_iterator.update();
std::cin.get();
return 0;
}
분명히이 컴파일되지 않습니다이 코드를 여기에 오류가 있습니다 :
In member function `virtual void EFentity::destroy()':
[20] invalid use of undefined type `struct EFiterator'
[5] forward declaration of `struct EFiterator'
내가 본 문제 그래서 전에는 이런 식 이었지만 다른 클래스의 멤버 변수와 함수에 액세스 할 필요가 없으므로 포인터로 쉽게 해결할 수있었습니다.
나는이 생각 는 EFiterator
의 내부 배열에 액세스 할 수있는 프로토 타입 기능을함으로써 해결 될 수 있지만, 일부 까다로운 수준의 조작을 원활하게 할 수있는 방법이 있나요? 이 문제를 해결해야 EFiterator
정의 후 EFentity::destroy()
을 넣어
holder->ents[holder_id]=NULL;
를 호출 할 때