我正在尝试编写一个包装MPI的框架库。
我有一个框架调用的头文件afw.h和一个框架实现文件afw.c
我希望能够通过在应用程序代码中执行#include "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);

我为afw.h中的RecvAsynch提供了一个实现,它afw.c
当我使用#includes afw.h编译时(在本例中使用下面的pgc是一个MPI编译器包装器):
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)

以及在mpicc中使用ReqStruct的类似错误
你知道我做错了什么吗?

最佳答案

你定义了一个struct ReqStruct,而不是ReqStruct,它们不是同一回事。
或者将函数更改为

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

或者使用typedef:
typedef struct ReqStruct ReqStruct;

关于c - 标题编译中的结构错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10013286/

10-10 23:06