结构类型未识别?

时间:2011-03-30 05:07:49

标签: c visual-studio-2010 compiler-construction header structure

我有一个指向具体数据类型结构的抽象数据类型。功能在C文件中,而定义在头文件中。编译器给出了以下错误:labelgen.c(20):error 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;
}

代码显然非常简单,但我是C结构的初学者,而对于我的生活,我无法弄清楚为什么这不会编译。这是在visual studio 2010中完成的。

1 个答案:

答案 0 :(得分:2)

C ++将为labelGeneratorCDT定义类型struct labelGeneratorCDT; C没有。 (请注意.h文件如何使用typedef labelGeneratorADT。在C ++中会导致问题,因为labelGeneratorADT已经存在且无法typedef (struct labelGeneratorADT *)。)