| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1897 人关注过本帖
标题:[Error] ld returned 1 exit status什么鬼啊。谁能帮忙看一下
只看楼主 加入收藏
啊呜呜啊
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-11-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
[Error] ld returned 1 exit status什么鬼啊。谁能帮忙看一下
#include "stdio.h"
#include "stdlib.h"

#define OK   1
#define ERROR   0
#define OVERFLOW   -1
/*符号常量的定义:OK  ERROR   OVERFLOW   ……*/
typedef  int  TElemType;
typedef  int  Status;
typedef struct BiTNode{
    TElemType    data;
    struct BiTNode   *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
#define STACK_INIT_SIZE 10 // 存储空间的初始分配量
#define STACKINCREMENT 5// 存储空间的分配增量
typedef struct {
    BiTree *base;
    BiTree *top;
int  stackSize;
} SqStack;
/*类型定义:TElemType   Status   结点类型   
结点指针类型    顺序栈类型……  */

/*自定义函数的声明:
  CreateBiTree、PreOrder、InOrder、
  PostOrder、PreOrder_S、InitStack、
  LeafCount、Depth、DeleteChild…… */
  

Status CreateBiTree(BiTree &T);
Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e));
Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e));
Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e));
Status InOrder(BiTree T,Status(*Visit)(TElemType e));
Status PrintElement(TElemType e);
Status InitStack(SqStack &S);
Status Push (SqStack &S, BiTree e) ;
Status Pop (SqStack &S, BiTree &e) ;
Status StackEmpty(SqStack S);
  
/*main函数定义:
  在main函数中定义二叉树类型变量,
  通过调用自定义函数完成实验题目
 */
int main()
{
      int cord;BiTree T;TElemType e;
    printf("第一次使用必须输入先序遍历序列构造出二叉树!\n");
    do{
        printf("\n 主菜单 \n");
        printf("1 输入先序遍历序列构造二叉树\n ");
        printf("2 递归方法先序遍历二叉树\n ");
        printf("3 递归方法中序遍历二叉树 \n ");
        printf("4 递归方法后序遍历二叉树 \n ");
        printf("5 非递归方法后序遍历二叉树 \n ");
        printf("6 结束运行 \n ");
        printf("\n-------------------------------------------------------------------\n");
        printf("请输入您的选择( 1, 2, 3, 4,5,6)\n");
        scanf("%d",&cord);
        printf("\n");
        switch(cord){
        case 1:
            printf("输入先序序列:\n");
            CreateBiTree(T) ;
            break;
        case 2:
            PreOrderTraverse(T,PrintElement);
            break;
        case 3:
            InOrderTraverse(T,PrintElement);
            break;
        case 4:
            PostOrderTraverse(T,PrintElement);
            break;
        case 5:
            InOrder(T,PrintElement);
            break;
        case 6:
            exit(0);
}
}while (cord<=6);
return 0;
  system("pause");
      
}
  
Status CreateBiTree(BiTree &T)
{//根据输入的二叉树的先序遍历序列,构建二叉链表存储结构
 //遍历遇到空指针时,在遍历序列中加入代表空指针的字符 ^
 char ch ;
  getchar();
 scanf("%c",&ch);

 if(ch=='0')
      T=NULL;
 else
 {
     if(!(T=(BiTNode*)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
     T->data=ch;              //生成根节点
     CreateBiTree(T->lchild);     //构造左子树
     CreateBiTree(T->rchild);   //构造右子树
 }

    return OK;
}

Status PrintElement(TElemType e)
{
    printf("%c\n",e);
    return OK;
}

Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e))
{
    if(T){
        if(Visit(T->data))
          if(PreOrderTraverse(T->lchild,Visit))
             if(PreOrderTraverse(T->rchild,Visit))  return OK;
       return ERROR;
    } else  return OK;
   
}

Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e))
{
   
    if(T){  
        if(InOrderTraverse(T->lchild,Visit))
        if(Visit(T->data))
        if(InOrderTraverse(T->rchild,Visit))  return OK;
       return ERROR;
    } else  return OK;
   
}

Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e))
{
   
    if(T){
          if(PostOrderTraverse(T->lchild,Visit))
             if(PostOrderTraverse(T->rchild,Visit))
                 if(Visit(T->data))   return OK;
       return ERROR;
    } else  return OK;
   
   
}

Status InOrder(BiTree T,Status(*Visit)(TElemType e))
{
    SqStack S;BiTree p;
   InitStack(S);p=T;
   while(p||!StackEmpty(S))
   {
       if(p){Push(S,p);
          p=p->lchild;}//根指针进栈,遍历左子树
    else{//根指针退栈,访问根节点,遍历右子树
    Pop(S,p);   if(!Visit(p->data))  return ERROR;
    p=p->rchild ;
           } //else
   }//while
   return OK;
}

// 构造一个空栈 S
Status InitStack(SqStack S){
S.base= (BiTree *)malloc(STACK_INIT_SIZE * sizeof(BiTree));
if(!S.base) exit (OVERFLOW);
S.top = S.base;
S.stackSize = STACK_INIT_SIZE;
return OK;
}

//入栈函数
Status Push (SqStack &S,BiTree e) {
if(S.top-S.base>=S.stackSize){
    S.base=(BiTree *) realloc( S.base,
                (S.stackSize+STACKINCREMENT) * sizeof(BiTree));
    if(!S.base) return ERROR;
    S.top=S.base+S.stackSize;
    S.stackSize+=STACKINCREMENT;
}
   *S.top++ = e;
    return OK;

}

//出栈函数
Status Pop (SqStack &S, BiTree &e) {

if(S.top==S.base)
   return ERROR;
   e=*--S.top;
return OK;
}

// 判栈 S 是否为空栈
Status StackEmpty(SqStack S){
if (S.top==S.base) return  OK;
else return  ERROR;
}







搜索更多相关主题的帖子: 遍历 return printf base status 
2019-11-03 16:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
第一,编译器给出
undefined reference to `InitStack(SqStack&)'
ld returned 1 exit status
你应该贴出“undefined reference to `InitStack(SqStack&)'”这个具体错误给大家看,而不是“ld returned 1 exit status”这个定性陈词。
根据编译器的提示 --- undefined reference to `InitStack(SqStack&)' --- 在你源代码里确实没找到 Status InitStack(SqStack &S) 的实现,只有一个相近的 Status InitStack(SqStack S)。

第二,你这代码,C不C,C++不C++,且又不排版。我估计没人愿意浪费时间去看它。

2019-11-04 08:48
南郁
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2019-11-5
收藏
得分:10 
InitStack() 函数,你前面声明时,是:

Status InitStack(SqStack &S);


但后面实现它时,是这样的:
// 构造一个空栈 S
Status InitStack(SqStack S) {

 ...
}

注意到了吗? 入参 S ,声明时带引用(&),而实现时……

2019-11-05 20:05
快速回复:[Error] ld returned 1 exit status什么鬼啊。谁能帮忙看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018198 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved