2

重複の可能性:
前方宣言 FILE *

FILE などのポインターによってアクセスされる C 構造体のラッパー クラスを作成するとします。

Cであなたは言わなければならない

typedef struct _iobuf
    {
    /*content of this struct*/
    } FILE;

オブジェクト宣言で構造体を取り除く。ここで、filec.h で次のことを行います。

class FILE;

class FileC
    {
    public:
        FileC(const char* name,const char* mode);
        ~FileC();
    private:
        FILE* fptr;
    };

そしてfilec.cppで:

#include "filec.h"
#include <cstdio>

//Implementation of FileC member functions

しかし、コンパイルすると、不完全なタイプの構造体 FILE について苦情が寄せられます。インクルード順序を切り替えると、FILE が既に宣言されていることがわかります。実装固有の詳細を使用するか、FILE* を前後にキャストする代わりに void* を使用することで解決できます。しかし、どうすればうまくいくでしょうか?とにかくstdioも含まれているため、iostreamの使用は答えではありません。

4

0 に答える 0