struct编译错误中的struct

时间:2012-04-04 14:32:16

标签: c compiler-construction mpi header-files

我正在尝试编写一个包装MPI的框架库。

我有一个框架调用afw.h的头文件和一个名为afw.c的框架的实现文件。

我希望能够通过在应用程序代码中执行#include "afw.h"来编写使用该框架的应用程序代码。

摘自afw.h

#ifndef AFW_H
#define AFW_H

#include <mpi.h>

struct ReqStruct
{
    MPI_Request req;
};

ReqStruct RecvAsynch(float *recvbuf, FILE *fp);
int RecvTest(ReqStruct areq);

我在RecvAsynch afw.c

中为#includes afw.h提供了一个实现

当我使用mpicc编译时(在本例中使用MPI编译器包装器使用下面的pgc):

mpicc -c afw.c -o afw.o

我明白了:

PGC-S-0040-Illegal use of symbol, ReqStruct (./afw.h: 69)
PGC-W-0156-Type not specified, 'int' assumed (./afw.h: 69)
PGC-S-0040-Illegal use of symbol, ReqStruct (./afw.h: 71)
PGC-W-0156-Type not specified, 'int' assumed (./afw.h: 71)

以及ReqStruct

中使用afw.c的类似错误

任何想法我做错了什么?

2 个答案:

答案 0 :(得分:5)

您定义了一个struct ReqStruct,而不是ReqStruct,这些不是一回事。

将功能更改为

struct ReqStruct RecvAsynch(float *recvbuf, FILE *fp);

或使用typedef:

typedef struct ReqStruct ReqStruct;

答案 1 :(得分:4)

在C ++中,序列为:

struct ReqStruct
{
    MPI_Request req;
};

定义了一个可以在函数声明中使用的类型ReqStruct

在C中,它没有(它定义了你可以使用的类型struct ReqStruct);您需要添加typedef,例如:

typedef struct ReqStruct
{
    MPI_Request req;
} ReqStruct;

是的,struct标记可以与typedef名称相同。或者您可以使用struct ReqStruct代替ReqStruct到处;我会优先使用typedef