首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xor链表实现

xor链表实现
EN

Stack Overflow用户
提问于 2012-04-03 15:55:20
回答 4查看 1.8K关注 0票数 0

下面是我实现xor链表的代码

代码语言:javascript
复制
#include<iostream>

using namespace std;

struct node
{
    int v;
    node *next;
};

node *start=NULL;
node *end=NULL;

node *newnode(int v)
{
    node *np=new node;
    np->v=v;
    np->next=NULL;
    return np;
}

//returns the xor of two nodes
node *xor(node *a,node *b)
{
    return (node*)((long long)(a)^(long long)(b));
}

void insert(node *current,node *prev,node *np)
{
    if(start==NULL)
    {
        np->next=xor(prev,NULL);
        start=np;
        end=np;
    }
    else
    {
        insert(xor(prev,current->next),current,np);
    }
}

void displayforward(node *start,node *prev)
{
    if(start==NULL) return ;
    cout<<start->v<<"-> ";
    displayforward(xor(start->next,prev),start);
}

void displayBackward(node *end, node *prev){
    if(end == NULL) return;

    cout<< end->v<<" -> ";
    displayBackward( xor(end->next, prev), end);
}

int main()
{
    int a[] = {1,2,3,4,5,6,7,8,9,10}, n = 10;

    for(int i=0; i < n; i++){
        node *prev = NULL;
        insert(start, prev, newnode(a[i]));
    }

    cout<<"Forward: \n";
    node *prev=NULL;
    displayforward(start, prev);

    cout<<"\nBackward: \n";
    displayBackward(end, prev);

    return 0;
}

但是当我编译它的时候,它给出了这样的错误

代码语言:javascript
复制
1>------ Build started: Project: xor_list, Configuration: Debug Win32 ------
1>  xor_list.cpp
1>c:\users\daviti\documents\visual studio 2010\projects\xor_list\xor_list\xor_list.cpp(30): error C2872: 'end' : ambiguous symbol
1>          could be 'c:\users\daviti\documents\visual studio 2010\projects\xor_list\xor_list\xor_list.cpp(9) : node *end'
1>          or       'end'
1>c:\users\daviti\documents\visual studio 2010\projects\xor_list\xor_list\xor_list.cpp(69): error C2872: 'end' : ambiguous symbol
1>          could be 'c:\users\daviti\documents\visual studio 2010\projects\xor_list\xor_list\xor_list.cpp(9) : node *end'
1>          or       'end'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

为什么是模棱两可的符号结束?这个错误是什么意思?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-03 16:10:06

编译器不确定是使用end全局变量还是使用std::end符号,这恰好是一个将迭代器返回到容器末尾的函数。给这个符号赋值没有多大意义是另一回事。删除using namespace std;指令以解决此特定问题。我建议将其替换为using std::cout;,以避免污染名称空间。

票数 5
EN

Stack Overflow用户

发布于 2012-04-03 15:59:20

在您的项目中似乎有另一个名为end的符号。您必须重命名该符号。

或者你有一个扩展或者插件将end定义为一个关键字。

票数 1
EN

Stack Overflow用户

发布于 2012-04-03 16:24:03

使用时,要么必须更改变量名以消除歧义

using namespace std;

或者你必须声明你的终端为std::end而不包括using namespace std;

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9989265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档