我試圖建立一個基本的實體/對象管理系統,我有兩個類,一個用於繼承實體的基類,另一個用於管理和控制它們。如何定義循環依賴關係的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'
我所看到的問題就像之前的SO一樣,但它們不需要訪問其他類的成員變量和函數,所以可以用指針輕鬆解決。
我認爲這可以通過具有原型函數來訪問的EFiterator
內的陣列來解決,但有沒有辦法用一些棘手的類操作順利做到這一點?
哇,謝謝。我很高興看到這些簡單的答案。很好的例子。 – object