मुझे परिपत्र निर्भरताओं के बारे में पता है, लेकिन आगे की घोषणाओं के साथ भी मुझे यह क्षेत्र मिलता है। मैं क्या गलत कर रहा हूँ?अपूर्ण प्रकार की संरचना का अमान्य उपयोग, आगे की घोषणा के साथ भी
// facility.h
class Area;
class Facility {
public:
Facility();
Area* getAreaThisIn();
void setAreaThisIsIn(Area* area);
private:
Area* __area;
};
// facility.cpp
#include "facility.h"
#include "area.h"
{ ... }
// area.h
class Facility;
class Area {
public:
Area(int ID);
int getId();
private:
std::list<Facility*> _facilities;
};
// area.cpp
#include "area.h"
#include "facility.h"
तो यह ठीक संकलित है, लेकिन आप एक पूर्ण घोषणा ही नहीं, आगे घोषणा की जरूरत है अगर मैं
// foo.h
#include "facility.h"
class Foo { .. };
// foo.cpp
#include "foo.h"
void Foo::function() {
Facility* f = new Facility();
int id = f->getAreaThisIsIn()->getId();
कर जब मैं invalid use of incomplete type struct Area
क्या आपने ** क्षेत्र.h ** को शामिल किया है जो आप 'Foo :: function() 'को परिभाषित कर रहे हैं? –
मैंने 'सुविधा' में 'getAreaThisIn()' टाइपो को सही करने के बाद g ++ ('सुविधा' और' क्षेत्र' विधियों की स्टब परिभाषाओं में) जोड़कर इसे संकलित करने का प्रयास किया है ('getAreaThisIsIn() 'होना चाहिए) यह मेरे लिए संकलित है। हालांकि मेरे 'Foo.cpp' में दोनों शीर्षलेख शामिल थे। – QuantumMechanic
ध्यान दें कि पहचानकर्ता जो दो अंडरस्कोर से शुरू होते हैं ('__area' मैं आपको देख रहा हूं) कार्यान्वयन द्वारा आरक्षित हैं और इनका उपयोग नहीं किया जाना चाहिए। –