函数 getManager 创建一个 Manager 结构并从 ManagerP 类型返回一个指向它的指针(这个函数工作正常)。定义是这样的:
typedef struct Manager
{
int ID;
char name[MAX_NAME_LENGTH];
int numberOfStudentsInSchool;
double paycheck;
double attract;
} Manager;
typedef struct Manager *ManagerP;
//My little code (that does the problem) is this (it's inside main):
int foundId;
ManagerP manToFind = getManager(1, "manager2", 200.0 , 1.0, 1000); //this works ok.
foundId = manToFind->ID; //Error : "dereferencing pointer to incomplete type"
你能帮我找出问题吗?我不明白这个错误是什么意思。
谢谢。
编辑:
谢谢,但我刚刚注意到一个问题。这些行在“Manager.c”中。
typedef struct Manager
{
int ID;
char name[MAX_NAME_LENGTH];
int numberOfStudentsInSchool;
double paycheck;
double attract;
} Manager;
typedef struct Manager *ManagerP;
在我的主文件中,我确实包含了具有更多定义的“Manager.h”。我刚刚检查过,当我将两个 typedefs 代码(上面写的)移动到主文件时,一切正常。但是我需要将这些 typedefs 放在“Manager.c”中(然后我仍然收到“取消引用指向不完整类型的指针”错误。那么问题是什么?
编辑#2:好的,我正在发布三个文件。当我编译那些我得到错误:“GenSalary.c:9:21: 错误:取消引用指向不完整类型的指针”
这些是文件:
// * Manager.h * :
#ifndef MANAGER_H
#define MANAGER_H
#define MAX_NAME_LENGTH 30
typedef struct Manager *ManagerP;
ManagerP getManager(int ID, const char name[], double paycheck,
double attract, int numberOfStudentsInSchool);
#endif
// * Manager.c * :
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include "Manager.h"
#define MAX_PRINT_LENGTH 1000
typedef struct Manager
{
int ID;
char name[MAX_NAME_LENGTH];
int numberOfStudentsInSchool;
double paycheck;
double attract;
} Manager;
ManagerP getManager(int ID, char const name[], double paycheck,
double attract, int numberOfStudentsInSchool)
{
ManagerP retVal = (ManagerP) malloc(sizeof(struct Manager));
if (retVal == NULL)
{
fprintf(stderr, "ERROR: Out of memory in Manager\n");
exit(1);
}
retVal->ID = ID;
strcpy(retVal->name, name);
retVal->paycheck = paycheck;
retVal->attract = attract;
retVal->numberOfStudentsInSchool = numberOfStudentsInSchool;
return retVal;
}
// * GenSalary.c * :
#include <stdio.h>
#include <stdlib.h>
#include "Manager.h"
int main()
{
int foundId;
ManagerP manToFind = getManager(1, "manager2", 200.0 , 1.0, 1000); //this works ok.
foundId = manToFind->ID; //Error : "dereferencing pointer to incomplete type"
return 0;
}
我使用 gcc -Wall GenSalary.c Manager.c -o GenSalary 编译它,我得到: GenSalary.c:9:21: 错误:取消引用指向不完整类型的指针
注意:我不能更改管理器文件(它们属于锻炼)我只能更改主要文件。
感谢您的帮助!