using System;namespace CountNum3
{
//双向循环链表
public class MyIntLinkList
{
//static member variable for public
static public MyIntLinkList Head; //generally member variable for public
public MyIntLinkList Prev;
public MyIntLinkList Next;
public uint Data;

//Construct function for public
public MyIntLinkList(MyIntLinkList prev,uint uData)
{
if (prev != null)//双向循环链表,除非初始化链表,否则不可能有null的前驱
{
prev.Next = this;
MyIntLinkList.Head.Prev = this;
this.Prev = prev;
this.Next = MyIntLinkList.Head;
}
this.Data = uData;
} //Member function for public: delete current object in linklist
public MyIntLinkList Remove()
{
this.Next.Prev = this.Prev;
this.Prev.Next = this.Next;
return this.Next;
} //static function for public: create a linklist
static public MyIntLinkList CreateLinklist(uint nHeadData)
{
MyIntLinkList.Head = new MyIntLinkList(null,nHeadData);
MyIntLinkList.Head.Prev = MyIntLinkList.Head;
MyIntLinkList.Head.Next = MyIntLinkList.Head;
return MyIntLinkList.Head;
}
}
}

解决方案 »

  1.   

    #include <iostream>using namespace std;class MyDLinklist
    {
    public:
    static MyDLinklist* pHead;
    MyDLinklist* pNext;
    MyDLinklist* pPrev;
    public:
    MyDLinklist(MyDLinklist* prev,int data)//默认插入尾部
    {
    if (prev!=NULL)
    {
    prev->pNext = this;
    pHead->pPrev = this;
    pPrev = prev;
    pNext = pHead;
    }
    this->data = data;
    } static MyDLinklist* CreateDLinklist(int data)
    {
    MyDLinklist::pHead = new MyDLinklist(NULL,data);
    MyDLinklist::pHead->pPrev = MyDLinklist::pHead;
    MyDLinklist::pHead->pNext = MyDLinklist::pHead;
    return MyDLinklist::pHead;
    }
    static bool ReleaseDLinklist()
    {
    MyDLinklist*p = MyDLinklist::pHead->pNext;
    while (p->pNext != p)
    {
    p = p->pNext;
    delete p->pPrev;
    }
    delete MyDLinklist::pHead;
    }
    private:
    int data;
    };这是我现在翻的,无法执行。提示错误:
    Number3 error LNK2001: 无法解析的外部符号 "public: static class MyDLinklist * MyDLinklist::pHead" (?pHead@MyDLinklist@@2PAV1@A)快急疯了。谁能帮帮我。不胜感激。
      

  2.   

    我的代码在这里
    http://www.zhdgps.com/downsoft/download/code.rar
    我尝试用vc6,vc7去编译,都不可以。请教如何做了。~
      

  3.   

    static MyDLinklist* pHead;只是定义了一个静态变量,没有声明。添加:
    MyDLinklist* MyDLinklist::pHead = NULL;
      

  4.   

    Static data members are not part of objects of a given class type; they are separate objects. As a result, the declaration of a static data member is not considered a definition. The data member is declared in class scope, but definition is performed at file scope.
      

  5.   

    我说反了,static MyDLinklist* pHead;只是声明了一个静态变量,没有定义其实例。
      

  6.   

    MyDLinklist* MyDLinklist::pHead = NULL;谢谢!
    我之前少了个类型,我看书知道需要在函数外赋值,我也写了这句,只是不全
    MyDLinklist::pHead = NULL;按Mackz大侠方法可以了。但是,语义上,如何解释呢?我只是一个赋值语句,为什么还要写类型修饰?
      

  7.   

    因为MyDLinklist* MyDLinklist::pHead = NULL;这一句是放在类声明和定义外面的,如果不加上MyDLinklist::的话,你说这个pHead是全局变量?还是MyDLinklist的成员变量?
      

  8.   

    不好意思,看错了   :)
    定义一个变量的话当然需要类型了。(我只是记得应该像Mackz(在相互)说得这样做,为什么要加上类型,我也说不上来,汗!~~)
      

  9.   

    Static data members are not part of objects of a given class type; they are separate objects. As a result, the declaration of a static data member is not considered a definition. The data member is declared in class scope, but definition is performed at file scope.静态数据成员不是类的一部分:他们是单独的对象。因此,声明一个静态数据成员并不意味着定义。这个数据成员在类的作用域里面声明,但是要在文件作用域里面定义。
      

  10.   

    不过,还有个不明白,auto,static,extern,这些不是作用域标识符么,static是不是表示此文件以外不可以使用这个?不好意思,我记得这些以前看c的时候有说。不知道是不是我搞混了。
      

  11.   

    恩,那是第一层意思,static还表示只有一个实例的变量,经常用于计数器。