我们来看一个例子:
tree.h中:
#ifndef TREE_20100118
#define TREE_20100118
#include
#include "Node.h"
class Tree
{
int counter_;
std::vector 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
//#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();
这只是一个简单的例子来说明问题.所以我想要的是从Node对象调用Tree的函数.
更新#1:感谢您的回答.我尝试像在Java中一样解决问题,即每个类只使用一个文件.看来我必须开始分离.cpp和.h文件……
更新#2:下面,根据提示,我也粘贴了完整的解决方案.谢谢,问题解决了.
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/c-touwenjianzhijiandexunhuanyilaixing.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9月 19, 2019 at 04:18 下午