| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1603 人关注过本帖
标题:求助:c不完全类型?
只看楼主 加入收藏
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
 问题点数:0 回复次数:10 
求助:c不完全类型?
c不完全类型是怎么回事?
搜索更多相关主题的帖子: 类型 
2007-09-07 12:36
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
收藏
得分:0 
说出你的情况
在什么情况下就出现“不完全类型”的提示

jorden008@
2007-09-07 13:19
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 

我看一本c语言教材上写的,它说c中指针可以未定义就使用,叫不完全类型
原代码如下:
它在stack.h中用stackCDT定义了一个变量,但stackCDT却是在stack.c中实现的
/*File:stack.h*/
#ifndef _stack_h
#define _stack_h

#include "genlib.h"
typedef double stackElementT;
typedef struct stackCDT *stackADT;

stackADT NewStack(void);

void FreeStack(stackADT stack);

void Push(stackADT stack,stackElementT element);

void ExpandStack(stackADT stack);

stackElementT Pop(stackADT stack);

bool StackIsEmpty(stackADT stack);

bool StackIsFull(stackADT stack);

int StackDepth(stackADT);

stackElementT GetStackElement(stackADT stack,int index);

#endif

/*File: stack.c*/

#include <stdio.h>
#include "genlib.h"
#include "stack.h"

struct stackCDT
{
stackElementT *elements;
int count;
int size;
};

stackADT NewStack(void)
{
stackADT stack;

stack=New(stackADT);
stack->elements=NewArray(InitialStackSize,stackElemmentT);
stack->count=0;
stack->size=/*File: stack.c*/

#include <stdio.h>
#include "genlib.h"
#include "stack.h"


stackADT NewStack(void)
{
stackADT stack;

stack=New(stackADT);
stack->elements=NewArray(InitialStackSize,stackElemmentT);
stack->count=0;
stack->size=InitialStackSize;
return stack;
}

void FreeStack(stackADT stack)
{
FreeBlock (stack->elements);
FreeBlock (stack);
}

void Push(stackADT stack,stackElementT element)
{
if(stack->count==size) ExpandStack(stack);
stack->elements[stack->count++]=element;
}

static void ExpandStack(stackADT stack)
{
stackElementT *array;
int i,newSize;

newSize=stack->size*2;
array=NewArray(newSize,stackElementT);
for(i=0;i<stack->size;i++)
{
array[i]=stack->elements[i];
}
FreeBlock(stack->elements);
stack->elements=array;
stack->size=newSize;
}

stackElementT Pop(stackADT stack)
{
if (StackIsEmpty(stack)) Error("Pop of an empty stack");
return(stack->elements[--stack->count]);
}

bool StackIsEmpty (stackADT stack)
{
return(stack->count==0)
}

bool StackIsFull(stackADT stack)
{
return FALSE;
}

int StackDepth(stackADT stack)
{
return(stack->count);
}

stackElementT GetStackElement(stackADT stack,int index)
{
if (index<0||index>=stack->count)
{
Error("Non existent stack element");
}
return(stack->elements[stack->count-index-1]);
}


2007-09-09 15:30
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
收藏
得分:0 
因为stack.c文件包含了stack.h这样stackCDT与在stack.c中定义差不多.

清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-09-09 16:27
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 

可是在tc下编译时显示无法找到stackCDT,我同学说是因为先载入.h文件


2007-09-10 11:55
ml342418175
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2007-4-13
收藏
得分:0 
加个路径看看

做人要洒脱一点,潇洒一点!
2007-09-10 15:55
virusswb
Rank: 1
等 级:新手上路
威 望:1
帖 子:342
专家分:0
注 册:2005-8-6
收藏
得分:0 
那应该叫不安全类型吧,你的书是那里的啊

jorden008@
2007-09-10 16:45
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

出现这样的原因是因为头文件中没有出现stackCDT结构体数据类型.
当然会出一个警告:Warning: Undefined structure 'stackCDT'.
解决这样方法是将stack.c中对stackCDT的定义放到头文件中,这也符合一般的规则.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-09-10 18:27
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 

Roberts的《程序设计抽象思想-c语言描述》的第八章堆栈一节讲的
它说将stackCDT放在.h中是为了对客户隐藏数据结构


2007-09-11 12:49
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 
哪位大虾帮忙解决下阿

2007-09-12 21:12
快速回复:求助:c不完全类型?
数据加载中...
 
   



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

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