मैं दो वर्गों के साथ पेड़ जैसी संरचना को लागू करने की कोशिश कर रहा हूं: वृक्ष और नोड। समस्या यह है कि प्रत्येक वर्ग से मैं दूसरे वर्ग के एक समारोह को कॉल करना चाहता हूं, इसलिए सरल आगे की घोषणा पर्याप्त नहीं है। चलो एक उदाहरण देखें:शीर्षलेख फ़ाइलों के बीच चक्रीय निर्भरता
Tree.h:
#ifndef TREE_20100118
#define TREE_20100118
#include <vector>
#include "Node.h"
class Tree
{
int counter_;
std::vector<Node> nodes_;
public:
Tree() : counter_(0) {}
void start() {
for (int i=0; i<3; ++i) {
Node node(this, i);
this->nodes_.push_back(node);
}
nodes_[0].hi(); // calling a function of Node
}
void incCnt() {
++counter_;
}
void decCnt() {
--counter_;
}
};
#endif /* TREE_20100118 */
Node.h:
#ifndef NODE_20100118
#define NODE_20100118
#include <iostream>
//#include "Tree.h"
class Tree; // compile error without this
class Node
{
Tree * tree_;
int id_;
public:
Node(Tree * tree, int id) : tree_(tree), id_(id)
{
// tree_->incCnt(); // trying to call a function of Tree
}
~Node() {
// tree_->decCnt(); // problem here and in the constructor
}
void hi() {
std::cout << "hi (" << id_ << ")" << endl;
}
};
#endif /* NODE_20100118 */
कॉलिंग ट्री:
#include "Tree.h"
...
Tree t;
t.start();
समस्या को समझाने के लिए यह एक साधारण उदाहरण है। तो मैं जो चाहता हूं वह नोड ऑब्जेक्ट से पेड़ के एक समारोह को बुला रहा है।
अद्यतन # 1: उत्तर के लिए धन्यवाद। मैंने जावा में समस्या को हल करने की कोशिश की, यानी प्रति वर्ग केवल एक फ़ाइल का उपयोग कर। ऐसा लगता है कि मुझे .cpp और .h फ़ाइलों को अलग करना शुरू करना होगा ...
अद्यतन # 2: नीचे दिए गए संकेतों के बाद, मैंने पूरा समाधान भी चिपकाया। धन्यवाद, समस्या हल हो गई।