Tôi có hai lớp, foo và bar. foo bao gồm thanh và chứa một std :: vector của con trỏ để thanh các đối tượng. tại một số thời điểm trong thời gian chạy, thanh phải truy cập vectơ này của con trỏ đến các đối tượng thanh khác. Do đó, foo chứa một phương thức có tên getBarObjects() trả về mảng con trỏ.khai báo chuyển tiếp với vectơ loại lớp - con trỏ tới loại lớp không đầy đủ không được phép
Do đó, tôi chuyển tiếp khai báo foo trong thanh. Tôi obvioulsy cũng phải chuyển tiếp khai báo phương thức tôi đang sử dụng - foo :: getBarObjects(). Vì điều này trả về mảng các con trỏ tới thanh, tôi đi vào một vòng luẩn quẩn.
Tôi không thể chuyển tiếp bao gồm Bar và sau đó chỉ đơn giản là chuyển tiếp bao gồm getBarObjects(), vì điều này dẫn đến "tên loại không đầy đủ không được phép".
foo.h:
#include "bar.h"
#include <vector>
class foo {
public:
foo();
~foo();
std::vector<bar*> getBarObjects();
private:
std::vector<bar*> barObjects;
}
bar.h:
class foo;
std::vector<bar*> foo::getBarObjects(); // error, doesn't know bar at this point
class bar {
public:
bar(foo *currentFoo);
~bar();
bool dosth();
private:
foo *thisFoo;
}
bar.cpp:
#include "bar.h"
bool bar(foo *currentFoo) {
thisFoo = currentFoo;
}
bool bar::dosth() {
thisFoo->getBarObjects(); // error, pointer to inomplete class type is not allowed
}
Nếu tôi chỉ đơn giản bao gồm các cách khác xung quanh, tôi sẽ phải chỉ là cùng một vấn đề trong foo lateron. Bất kỳ đề xuất?
Meh, giải pháp đơn giản cho một vấn đề có vẻ lớn. Cảm ơn bạn! – Aerius