C 结构类型未识别?
我有一个指向具体数据类型结构的抽象数据类型。功能在C文件中,而定义在头文件中。编译器给了我以下错误:labelgen.c(20):错误C2065:'labelGeneratorCDT':未声明的标识符 以下是标题:C 结构类型未识别?,c,visual-studio-2010,compiler-construction,header,structure,C,Visual Studio 2010,Compiler Construction,Header,Structure,我有一个指向具体数据类型结构的抽象数据类型。功能在C文件中,而定义在头文件中。编译器给了我以下错误:labelgen.c(20):错误C2065:'labelGeneratorCDT':未声明的标识符 以下是标题: #ifndef _labelgen_h #define _labelgen_h // labelGeneratorCDT is defined as a structure // for a label generator, with labelGeneratorADT // be
#ifndef _labelgen_h
#define _labelgen_h
// labelGeneratorCDT is defined as a structure
// for a label generator, with labelGeneratorADT
// being a pointer to it
typedef struct labelGeneratorCDT* labelGeneratorADT;
// Function to generate a new labelGeneratorADT
labelGeneratorADT NewLabelGenerator(char* prefix, int sequenceNum);
// Function to retrieve the new label string
char* GetNextLabel(labelGeneratorADT labelGenerator);
// Function to free the memory allocated to the labelGeneratorADT
void FreeLabelGenerator(labelGeneratorADT labGenerator);
#endif
这是C文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "labelgen.h"
// labelGenerator CDT has a prefix string
// and a sequence number to start with
struct labelGeneratorCDT
{
char* prefix;
int sequenceNum;
};
labelGeneratorADT NewLabelGenerator(char* prefix, int sequenceNum)
{
// Start with NULL, shorter line
labelGeneratorADT labelGenerator = NULL;
// Allocate enough memory to fit a labelGeneratorCDT
labelGenerator = (labelGeneratorCDT*)(malloc(sizeof(labelGeneratorCDT)));
// Allocate memory for the prefix string
labelGenerator->prefix = (char*)(malloc((strlen(prefix)+1)*(sizeof(char))));
// Copy over prefix
strcpy(labelGenerator->prefix,prefix);
// Simply copy the sequence number
labelGenerator->sequenceNum = sequenceNum;
return labelGenerator;
}
char* GetNextLabel(labelGeneratorADT labelGenerator)
{
return "0";
}
void FreeLabelGenerator(labelGeneratorADT labGenerator)
{
return;
}
#包括
#包括
#包括
#包括“labelgen.h”
//labelGenerator CDT具有前缀字符串
//和一个序列号
结构labelGeneratorCDT
{
字符*前缀;
int sequenceNum;
};
labelGeneratorADT NewLabelGenerator(字符*前缀,int sequenceNum)
{
//从空的、较短的行开始
labelGeneratorADT labelGenerator=NULL;
//分配足够的内存以适合labelGeneratorCDT
labelGenerator=(labelGeneratorCDT*)(malloc(sizeof(labelGeneratorCDT));
//为前缀字符串分配内存
标签生成器->前缀=(字符*)(malloc((strlen(前缀)+1)*(sizeof(字符));
//复制前缀
strcpy(labelGenerator->prefix,prefix);
//只需复制序列号即可
labelGenerator->sequenceNum=sequenceNum;
返回标签发生器;
}
char*GetNextLabel(labelGenerator和labelGenerator)
{
返回“0”;
}
无效FreeLabelGenerator(labelGeneratorADT labGenerator)
{
返回;
}
代码显然非常简单,但我是C结构的初学者,我一辈子都不明白为什么它不能编译。这是在visual studio 2010中完成的。C++将为
struct labelGeneratorCDT
定义一个类型labelGeneratorCDT
;C没有。请注意< <代码> .h >代码>文件如何使用<代码> TyPulfF/C++ > <代码>标签> Adt/<代码>。那么我该如何解决这个问题呢?typedef struct labelGeneratorCDT labelGeneratorCDT代码>?我给你指了指头文件中的typedef
,这样你就可以看到它是如何完成的。哇,真管用。奇怪的是,在我的C编程课上从来没有教过我这个。不管怎样,只要。。。