1

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(この場合は下に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)

および同様のエラーReqStructafw.c

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

5

あなたは、struct ReqStructではなくReqStruct、を定義しましたが、それらは同じものではありません。

関数を次のように変更します

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

またはtypedefを使用します:

typedef struct ReqStruct ReqStruct;
于 2012-04-04T14:34:19.273 に答える
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します。

于 2012-04-04T14:35:35.777 に答える