两个类的定义互相依赖,谁先定义都不行。
//////////////////////////////////////////////////////////////////////////
// 编译出错的代码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;
}//////////////////////////////////////////////////////////////////////////

解决方案 »

  1.   

    这个不通过的原因是因Pool的构造函数写在Pool类的里面,而且,构造函数中还引用了Node类的构造函数,将Pool的构造函数拿出来 就行了,改成下面这样:
    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;
    }
      

  2.   

    的确如楼上所说.
    class Node;只是声明一个类型.并不能生成实例.如果new Node();到哪里去找实体来创建对象?
      

  3.   

    http://codeguru.earthweb.com/forum/showthread.php?p=1224714
      

  4.   

    http://www.cnblogs.com/Xiao_bird/archive/2009/09/14/1566510.html