0

コードを作成しましたが、エラーがあり、解決できません:-

次のエラーは私のヘッダーファイルの1つにあります(以下に示すコード)

エラーC2143:構文エラー:';'がありません 前 '*'

エラーC4430:型指定子がありません-intと見なされます。注:C++はdefault-intをサポートしていません

エラーC4430:型指定子がありません-intと見なされます。注:C++はdefault-intをサポートしていません

ヘッダーファイルコード:-

#ifndef _DEVICE_SOURCE_FICARD_HH
#define _DEVICE_SOURCE_FICARD_HH

#ifndef _FRAMED_SOURCE_HH
#include "FramedSource.hh"
#endif

#include <DeviceSource.hh>

typedef struct LtagBufferEntry
{
  char *pBuffer;
  struct LtagBufferEntry *pNext;
} LBufferEntry;

class FICardDeviceParameters {
public:
    (RetEntry*)(*p_lm_lock_fn)( void *data );  //error at this line
    void (*p_lm_unlock_fn)( void *data );
    int nFICardFrameSize;
  //%%% TO BE WRITTEN %%%
};

class DeviceSourceFICard: public DeviceSource {
public:
  static DeviceSourceFICard* createNew(UsageEnvironment& env, FICardDeviceParameters fi_params,
                 DeviceParameters params);

protected:
  DeviceSourceFICard(UsageEnvironment& env, FICardDeviceParameters fi_params, DeviceParameters params);
  // called only by createNew(), or by subclass constructors
  virtual ~DeviceSourceFICard();

private:
  // redefined virtual functions:
  virtual void doGetNextFrame();

private:
  void deliverFrame();

private:
  DeviceParameters fParams;
  LBufferEntry *pData;
  char         * pRetData;
  //int nFICardFrameSize;
  FICardDeviceParameters fiParams;
};

#endif //_DEVICE_SOURCE_FICARD_HH

RetEntryの定義:-

typedef struct tagRetBuffer
{
  char *pBuffer;
  int nDataLn;
} RetEntry;

void InitBufferHandling();
void TransferBuffer( void *pBuffer );
RetEntry *lm_lock_fn( void *data );
void lm_unlock_fn( void *data );
int initLm555Settings(void);
void play();
void afterPlaying(void*);
void init_play();
void StartRTPProcess(void);

それらを修正する方法...

4

1 に答える 1

0

問題は、コンパイラが式の内容を認識していないことRetEntryです。

(RetEntry*)(*p_lm_lock_fn)( void *data );

定義を提供するヘッダーを含めるか、現在のヘッダーで宣言する必要があります。以下のコードからは typedef のように見えるためtagRetBuffer、現在の翻訳単位で宣言するには、構造体と typedef を宣言する必要があります。

struct tagRetBuffer;
typedef tagRetBuffer RetEntry;

ここで、これらの typedef を完全に避けることをお勧めします。C++ では、必要に応じてコンパイラが型を検索します。あなたはただ行うことができます:

struct RetEntry
{
  char *pBuffer;
  int nDataLn;
};

そして、RetEntryそれが型定義された名前であるかのようにどこでも使用します。違いはありますが、99% の場合は気付かないことに注意してください。そして、あなたがそれがあなたの利点になるかもしれないことに気付いた場合(たとえば、typedefを宣言できないため、typedefされた名前を宣言してから、ここでの最初の提案に従ってtypedefを再定義する必要があります)。

于 2012-04-24T12:40:30.533 に答える