-1

我的代码如下(这是用于双向链表结构,添加一个新节点):

    void addhead(student* node_, student*& olist)
    {
        if(!olist)
        {
            olist=node_;
        }   
        else
        {
            node_->flink=olist;
            node_->blink=last(olist);  //ERROR
            olist->blink=node_;
            last(olist)->flink=node_;  //ERROR
            olist=node_;
        }
    }

我得到该函数的“找不到标识符”错误last()

我的学生结构和数组初始化如下:

public struct student
        {
        public:
        char ogrNo[13];
        char isim[100];
        char tck[11];
        char dYeri[50];
        char dTarihi[50];
        char bolum[255];
        char sinif[100];
        char mail[50];
        char cep[50];
        char adres[255];


        ogrenci* blink;
        ogrenci* flink;
        };

student* o=(student*)malloc(sizeof(student));

有没有办法last()在 C++/CLI (Studio.NET 2010) 中实现函数或等效函数?此代码对于非托管 C++ 来说是干净的。

4

3 回答 3

0

我自己解决了这个问题......感谢所有的贡献,未来的评论也会很有用。

我尝试了 System::Collections::Generic::LinkedList 类,但我发现无法定义结构或类数组的 LinkedList(无论是否为 ref)。

然后,为了绕过 C++/CLI 不支持的 last() 函数,我定义了一个

int last=-1;

处理结构数组的最后一个元素。然后将上面的代码修改如下:

void addhead(ogrenci* node_, ogrenci*& olist)
    {
        if(!olist)
        {
            olist=node_;
            last++;
        }   
        else
        {
            node_->flink=olist;
            node_->blink=&olist[last];  //Orig: node_->blink=last(olist);
            olist->blink=node_;
            olist[last].flink=node_;    //Orig: last(olist)->flink=node_;
            olist=node_;
            last++;
        }
    }

这解决了我的问题,但欢迎您发表评论......

于 2013-01-06T20:13:37.763 回答
0

这条线是什么意思?我的意思是,为什么这两个字符在一起 *& ?

       void addhead(student* node_, student*& olist)
于 2013-11-14T13:36:02.797 回答
0

您可以添加您管理的第一个最后一个成员,以便它们始终指向列表的第一个和最后一个节点。

但是您不需要为每个类都实现链表功能,C++/CLI 中已经有链表类:

  • System::Collections::Generic::LinkedList
  • 客户端::列表
  • 标准::列表
于 2013-01-06T00:02:49.047 回答