Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构类型未识别?_C_Visual Studio 2010_Compiler Construction_Header_Structure - Fatal编程技术网

C 结构类型未识别?

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

我有一个指向具体数据类型结构的抽象数据类型。功能在C文件中,而定义在头文件中。编译器给了我以下错误:labelgen.c(20):错误C2065:'labelGeneratorCDT':未声明的标识符

以下是标题:

#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编程课上从来没有教过我这个。不管怎样,只要。。。