我制作了一个代码,但有错误并且无法解决它们: -
以下错误出现在我的一个头文件中(代码如下所示)
错误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);
如何修复它们......
答案 0 :(得分:0)
问题是编译器不知道表达式中的RetEntry
:
(RetEntry*)(*p_lm_lock_fn)( void *data );
您必须包含提供定义的标头,或者在当前标头中声明它。从下面的代码看来它似乎是tagRetBuffer
的typedef,所以要在当前的翻译单元中声明,你需要声明struct和typedef:
struct tagRetBuffer;
typedef tagRetBuffer RetEntry;
现在,我建议你完全避免使用那些typedef,在C ++中编译器会在需要时搜索类型。你可以这样做:
struct RetEntry
{
char *pBuffer;
int nDataLn;
};
然后在任何地方使用RetEntry
,就像它是typedef的名称一样。请注意,存在差异,但在99%的情况下您不会注意到。当你注意到它甚至可能对你有利(例如,你不能声明一个typedef,所以你需要声明 typedef的名字,然后重新定义按照这里的第一个建议输入typedef。)