0

私はGDALコードを少し調整していて、このようなtypedefを使用しています

typedef CPLErr (*MYWriter)( double dfLevel, int nPoints, double *padfX, double *padfY, void * );  

このようなクラスで使用されています

class GDALGenerator
{
...blah...
public:
    MYWriter pfnWriter;
    GDALGenerator( int nWidth, int nHeight, MYWriter pfnWriter, void *pWriterCBData );
...blah...
};

しかし、同じファイルで、GDALGeneratorクラスの下で、関数を作成すると

CPLErr MYWriter( double dfLevel, int nPoints, double *padfX, double *padfY, void *pInfo )
{}

このエラーが発生します

エラー 2 エラー C2365: 'MYWriter': 再定義。以前の定義は「typedef」でした f:\projects\map\somecpp\somecpp.cpp 1330 MyProjectName

標準のGDAL関数がこのように使用されており、正常に動作するため、私は混乱しています(その場合、クラスは別のDLLにあります)。別の名前で関数のコピーを作成しましたが、機能しません。

4

1 に答える 1

3

タイプ名を関数名として使用することはできません。変数のタイプとしてのみ使用できます。

これが明確になることを願っています:

CPLErr f( double dfLevel, int nPoints, double *padfX, double *padfY, void *pInfo )
{}
MYWriter foo = f;

于 2013-02-28T13:46:10.477 に答える