两个类的定义互相依赖,谁先定义都不行。
//////////////////////////////////////////////////////////////////////////
// 编译出错的代码class Node;class Pool
{
public:
Node* memory; Pool()
{
memory = new Node();
}
};class Node
{
public:
static Pool m_pool;
};Pool Node::m_pool;int main()
{
Node *p = Node::m_pool.memory;
}//////////////////////////////////////////////////////////////////////////
为什么加入“无用”的模板就正常了?如果不用模板怎样使第一段代码编译通过?
//////////////////////////////////////////////////////////////////////////
// 正常运行的代码class Node;template<class a>
class Pool
{
public:
Node* memory; Pool()
{
memory = new Node();
}
};class Node
{
public:
static Pool<bool> m_pool;
};Pool<bool> Node::m_pool;int main()
{
Node *p = Node::m_pool.memory;
}//////////////////////////////////////////////////////////////////////////
class Node;class Pool
{
public:
Node* memory; Pool();
};class Node
{
public:
static Pool m_pool;
};Pool::Pool()
{
memory = new Node();
}Pool Node::m_pool;int main()
{
Node *p = Node::m_pool.memory;
}
class Node;只是声明一个类型.并不能生成实例.如果new Node();到哪里去找实体来创建对象?