求助 缺少“;”(在标识符“strSIM”的前面) 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

九点人 2014-12-30 04:30:47
API.H
#ifndef _RTUAPI_H
#define _RTUAPI_H
#include <list>
#include <string>
using std::list;
using std::string;
//=================================================================================================================================

typedef unsigned long long u64; //uint8
typedef long long s64; //sint8
typedef unsigned int u32; //uint4
typedef int s32; //sint4
typedef unsigned short u16; //uint2
typedef short s16; //sint2
typedef unsigned char u8; //uint1
typedef char s8; //sint1
/*************************
功能:获取注册信息
strSIM:手机号
strIMEI:无线模块编号
strVer:程序版本号
strModule:模块型号
*************************/
typedef struct _logonInfo
{
CString strSIM;
CString strIMEI;
CString strVer;
CString strModule;
}LogonInfo;


MAIN
#include "stdafx.h"
#include "CommStruts.h"
#include <windows.h>
#include "RtuApi.h"
int _tmain(int argc, _TCHAR* argv[])
{

//2 调用 rtu的 dll文件

HINSTANCE hInstance2 = LoadLibrary(_T("RtuApi.dll"));
// 定义显示学生信息的方法
if (hInstance2!=NULL)
{
//定义函数指针
typedef int (* Rtu_StopServer)(void );

// 取得DLL中先生学生信息的方法,并映射成本地的方法
Rtu_StopServer rtu_StopServer = (Rtu_StopServer)GetProcAddress(hInstance2, "Rtu_StopServer");
// 创建学生信息

if (!rtu_StopServer)
{
printf("get address fail\n");
return 0;
}
else
{
printf("get address sucess\n");
}
if (rtu_StopServer()>=0)
{
printf("sucess\n ");
}
}

return 0;
}


为什么会提示

1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(26): error C2146: 语法错误: 缺少“;”(在标识符“strSIM”的前面)
1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(26): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(26): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(27): error C2146: 语法错误: 缺少“;”(在标识符“strIMEI”的前面)
1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(27): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(27): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>e:\c和c++学习\网络编程sx\dll试创建使用\rtuapi.h(28): error C2146: 语法错误: 缺少“;”(在标识符“strVer”的前面)

这个头文件里的错?

不知道为什么::::??求问呀
...全文
355 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2014-12-30
  • 打赏
  • 举报
回复

勾选MFC
九点人 2014-12-30
  • 打赏
  • 举报
回复
引用 2 楼 pengzhixi 的回复:
头文件里面的错又不贴头文件来
头文件
#ifndef _RTUAPI_H
#define _RTUAPI_H
#include <list>
#include <string>
using std::list;
using std::string;

//=================================================================================================================================

typedef unsigned long long u64;				//uint8
typedef long long s64;					//sint8
typedef unsigned int u32;				//uint4
typedef int s32;					//sint4
typedef unsigned short u16;				//uint2
typedef short s16;					//sint2
typedef unsigned char u8;				//uint1
typedef char s8;					//sint1
/*************************
 功能:获取注册信息
strSIM:手机号
strIMEI:无线模块编号
strVer:程序版本号
strModule:模块型号
*************************/
typedef struct _logonInfo
{
	CString strSIM;
	CString strIMEI;
	CString strVer;
	CString strModule;
}LogonInfo;
/*************************
 功能:数字输出
state:数字输出的接口状态  (取值:1-高电平 2-低电平3-方波)
cycle:周期 (毫秒 0-65535)
*************************/
typedef struct _digital_out_ 
{
	int state;
	int cycle;
}DIGITAL_OUT;

/*************************
功能:PWM输出
cycle:周期 (毫秒 0-65535) 字节数 - 2
duty: 频率 (毫秒 0-100 )  字节数 - 2
*************************/
typedef struct _pwm_
{
	int cycle; //65535
	int duty; //0 - 100 
}PWM;


/*************************
功能:计数器
val:计数当前值  字节数 - 8
*************************/
typedef struct _counter_
{
	__int64 val;
}COUNTER;

/*************************
功能:
val:
*************************/
typedef struct _common_
{
	int val;
}COMMON;

/*************************
功能:接口
digitalOut:数字输出
pwm:PWM输出
counter:计数器
common:
*************************/
typedef union _interface_value_
{
	DIGITAL_OUT digitalOut;
	PWM		pwm;
	COUNTER		counter;
	COMMON		common;
}INTERFACE_VAL;

/*************************
功能:RDV格式接口
type:	接口类型 用于指定是哪种接口 (1-数字输出 2-继电器 3-数字输入 4-PWM 5-AD 6-计数器)
number: 接口编号 用于指定该接口的第几路 (数字输出:0-3 继电器:0-3 数字输入:0-7 PWM:0-1 AD:0-7 计数器:0-5)
valueUnit: 该接口当前的状态值
*************************/
typedef struct _interface_rdv_
{
	int type;
	int number;
	INTERFACE_VAL valueUnit;
}INTERFACE_RDV;

/*************************
功能:ctl格式接口
type:	接口类型 用于指定是哪种接口 (1-数字输出 2-继电器 3-数字输入 4-PWM 5-AD 6-计数器)
number: 接口编号 用于指定该接口的第几路 (数字输出:0-3 继电器:0-3 数字输入:0-7 PWM:0-1 AD:0-7 计数器:0-5)
val: 该接口当前的状态值
*************************/
typedef struct _interface_ctl_
{
	int type;
	int number;
	int val;
}INTERFACE_CTL;

/*************************
功能:类型
STRINGTYPE:字符串	
INTTYPE:  整型 
*************************/
enum ValueType
{
	STRINGTYPE,
	INTTYPE,
};

typedef struct _config_item_
{
	int id;
	ValueType type;
	int intVal;
	CString strVal;
}CONFIG_ITEM;

/*************************
功能:报警接口
type:接口类型	
number:  接口编号 
strAlarm:字段
*************************/
typedef struct _interface_alarm_
{
	int type;
	int number;
	string strAlarm;
}INTERFACE_ALARM;

//设备上下线回调
/*@pThiz: 回调对象*/
/*@devAddr: 设备地址*/
/*@bLogon: 1是上线 0是下线*/
/*@info: 注册信息*/
typedef void (WINAPI *RtuLogonCallBack) (const void *pThiz, const u32 devAddr,const u8 bLogon, const LogonInfo info);

//接口状态获取的回调
/*@pThiz: 回调对象*/
/*@devAddr: 设备地址*/
/*@nRequestID: 通信包标识号*/
/*@nResult: >=0则表示成功,否则失败*/
/*@pList: 接口状态链表(具体格式参照协议)*/
typedef void (WINAPI *RtuInterfaceGetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											   const list<INTERFACE_RDV> *pList);

//接口设置的回调
/*@pFailedList: 返回设置失败的链表(具体格式参照协议)*/
typedef void (WINAPI *RtuInterfaceSetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											   const list<INTERFACE_CTL> *pFailedList);

//配置获取的回调
/*@pList: 配置参数的链表(具体格式参照协议)*/
typedef void (WINAPI *RtuConfigGetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											const list<CONFIG_ITEM> *pList);

//配置设置的回调
/*@pFailedList: 返回设置失败的链表(具体格式参照协议)*/
typedef void (WINAPI *RtuConfigSetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											const list<CONFIG_ITEM> *pFailedList);

//gps重启的回调
typedef void (WINAPI *RtuGpsRebootCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult);

//接口状态主动上报的回调: @pList 接口状态链表(具体格式参照协议)
typedef void (WINAPI *RtuInterfaceReport)(const void *pThiz, const u32 devAddr, const list<INTERFACE_RDV> *pList);

//接口报警主动上报的回调: @pList 接口报警链表(具体格式参照协议)
typedef void (WINAPI *RtuInterfaceAlarm)(const void *pThiz, const u32 devAddr, const list<INTERFACE_ALARM> *pList);

//短信报警主动上报的回调: @strAlarm 报警内容
typedef void (WINAPI *RtuSmsAlarm)(const void *pThiz, const u32 devAddr, const CString &strAlarm);
//=================================================================================================================================
extern "C"
{
	//启动服务器:@Port 端口号;@fun 上下线回调函数; @pThiz 回调对象;@handle1 接口状态主动上报回调函数;@handle2 接口状态报警回调函数;@handle3 短信报警回调函数 ;
	//返回值>0表示调用成功,否则失败
	s32 WINAPI Rtu_StartServer(u16 Port, RtuLogonCallBack fun, void *pThiz, RtuInterfaceReport handle1=0, RtuInterfaceAlarm handle2=0, RtuSmsAlarm handle3=0);
	
	//停止服务器
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_StopServer();

	//设置超时参数(单位 秒):@PackTimeOut 通信包超时时间;@ConnectTimeOut 心跳超时时间;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_SetServerParam(u16 PackTimeOut, u16 ConnectTimeOut);

	//获取接口状态:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_InterfaceGet(u32 devAddr, RtuInterfaceGetCallBack fun, void *pThiz, u32 &RequestID);

	//设置接口状态:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;@pList 要设置的接口状态列表;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_InterfaceSet(u32 devAddr, RtuInterfaceSetCallBack fun, void *pThiz, u32 &RequestID, const list<INTERFACE_CTL> *pList);

	//获取配置参数:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_ConfigGet(u32 devAddr, RtuConfigGetCallBack fun, void *pThiz, u32 &RequestID);

	//设置接口状态:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;@pList 要设置的配置参数列表;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_ConfigSet(u32 devAddr, RtuConfigSetCallBack fun, void *pThiz, u32 &RequestID, const list<CONFIG_ITEM> *pList);

	//Gps重启:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_GpsReboot(u32 devAddr, RtuGpsRebootCallBack fun, void *pThiz, u32 &RequestID);
};

#endif
九点人 2014-12-30
  • 打赏
  • 举报
回复
引用 3 楼 Dobzhansky 的回复:
CString 是 MFC 的, 你创建的什么类型的项目
我建立的win32控制台类型的 项目?这样有问题吗、
九点人 2014-12-30
  • 打赏
  • 举报
回复
头文件时 rRTU开发资料,这里我觉得没有错误,
#ifndef _RTUAPI_H
#define _RTUAPI_H
#include <list>
#include <string>
using std::list;
using std::string;
//=================================================================================================================================

typedef unsigned long long u64;				//uint8
typedef long long s64;					//sint8
typedef unsigned int u32;				//uint4
typedef int s32;					//sint4
typedef unsigned short u16;				//uint2
typedef short s16;					//sint2
typedef unsigned char u8;				//uint1
typedef char s8;					//sint1
/*************************
 功能:获取注册信息
strSIM:手机号
strIMEI:无线模块编号
strVer:程序版本号
strModule:模块型号
*************************/
typedef struct _logonInfo
{
	CString strSIM;
	CString strIMEI;
	CString strVer;
	CString strModule;
}LogonInfo;
/*************************
 功能:数字输出
state:数字输出的接口状态  (取值:1-高电平 2-低电平3-方波)
cycle:周期 (毫秒 0-65535)
*************************/
typedef struct _digital_out_ 
{
	int state;
	int cycle;
}DIGITAL_OUT;

/*************************
功能:PWM输出
cycle:周期 (毫秒 0-65535) 字节数 - 2
duty: 频率 (毫秒 0-100 )  字节数 - 2
*************************/
typedef struct _pwm_
{
	int cycle; //65535
	int duty; //0 - 100 
}PWM;


/*************************
功能:计数器
val:计数当前值  字节数 - 8
*************************/
typedef struct _counter_
{
	__int64 val;
}COUNTER;

/*************************
功能:
val:
*************************/
typedef struct _common_
{
	int val;
}COMMON;

/*************************
功能:接口
digitalOut:数字输出
pwm:PWM输出
counter:计数器
common:
*************************/
typedef union _interface_value_
{
	DIGITAL_OUT digitalOut;
	PWM		pwm;
	COUNTER		counter;
	COMMON		common;
}INTERFACE_VAL;

/*************************
功能:RDV格式接口
type:	接口类型 用于指定是哪种接口 (1-数字输出 2-继电器 3-数字输入 4-PWM 5-AD 6-计数器)
number: 接口编号 用于指定该接口的第几路 (数字输出:0-3 继电器:0-3 数字输入:0-7 PWM:0-1 AD:0-7 计数器:0-5)
valueUnit: 该接口当前的状态值
*************************/
typedef struct _interface_rdv_
{
	int type;
	int number;
	INTERFACE_VAL valueUnit;
}INTERFACE_RDV;

/*************************
功能:ctl格式接口
type:	接口类型 用于指定是哪种接口 (1-数字输出 2-继电器 3-数字输入 4-PWM 5-AD 6-计数器)
number: 接口编号 用于指定该接口的第几路 (数字输出:0-3 继电器:0-3 数字输入:0-7 PWM:0-1 AD:0-7 计数器:0-5)
val: 该接口当前的状态值
*************************/
typedef struct _interface_ctl_
{
	int type;
	int number;
	int val;
}INTERFACE_CTL;

/*************************
功能:类型
STRINGTYPE:字符串	
INTTYPE:  整型 
*************************/
enum ValueType
{
	STRINGTYPE,
	INTTYPE,
};

typedef struct _config_item_
{
	int id;
	ValueType type;
	int intVal;
	CString strVal;
}CONFIG_ITEM;

/*************************
功能:报警接口
type:接口类型	
number:  接口编号 
strAlarm:字段
*************************/
typedef struct _interface_alarm_
{
	int type;
	int number;
	string strAlarm;
}INTERFACE_ALARM;

//设备上下线回调
/*@pThiz: 回调对象*/
/*@devAddr: 设备地址*/
/*@bLogon: 1是上线 0是下线*/
/*@info: 注册信息*/
typedef void (WINAPI *RtuLogonCallBack) (const void *pThiz, const u32 devAddr,const u8 bLogon, const LogonInfo info);

//接口状态获取的回调
/*@pThiz: 回调对象*/
/*@devAddr: 设备地址*/
/*@nRequestID: 通信包标识号*/
/*@nResult: >=0则表示成功,否则失败*/
/*@pList: 接口状态链表(具体格式参照协议)*/
typedef void (WINAPI *RtuInterfaceGetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											   const list<INTERFACE_RDV> *pList);

//接口设置的回调
/*@pFailedList: 返回设置失败的链表(具体格式参照协议)*/
typedef void (WINAPI *RtuInterfaceSetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											   const list<INTERFACE_CTL> *pFailedList);

//配置获取的回调
/*@pList: 配置参数的链表(具体格式参照协议)*/
typedef void (WINAPI *RtuConfigGetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											const list<CONFIG_ITEM> *pList);

//配置设置的回调
/*@pFailedList: 返回设置失败的链表(具体格式参照协议)*/
typedef void (WINAPI *RtuConfigSetCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult,
											const list<CONFIG_ITEM> *pFailedList);

//gps重启的回调
typedef void (WINAPI *RtuGpsRebootCallBack)(const void *pThiz, const u32 devAddr, const u32 nRequestID, const s32 nResult);

//接口状态主动上报的回调: @pList 接口状态链表(具体格式参照协议)
typedef void (WINAPI *RtuInterfaceReport)(const void *pThiz, const u32 devAddr, const list<INTERFACE_RDV> *pList);

//接口报警主动上报的回调: @pList 接口报警链表(具体格式参照协议)
typedef void (WINAPI *RtuInterfaceAlarm)(const void *pThiz, const u32 devAddr, const list<INTERFACE_ALARM> *pList);

//短信报警主动上报的回调: @strAlarm 报警内容
typedef void (WINAPI *RtuSmsAlarm)(const void *pThiz, const u32 devAddr, const CString &strAlarm);
//=================================================================================================================================
extern "C"
{
	//启动服务器:@Port 端口号;@fun 上下线回调函数; @pThiz 回调对象;@handle1 接口状态主动上报回调函数;@handle2 接口状态报警回调函数;@handle3 短信报警回调函数 ;
	//返回值>0表示调用成功,否则失败
	s32 WINAPI Rtu_StartServer(u16 Port, RtuLogonCallBack fun, void *pThiz, RtuInterfaceReport handle1=0, RtuInterfaceAlarm handle2=0, RtuSmsAlarm handle3=0);
	
	//停止服务器
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_StopServer();

	//设置超时参数(单位 秒):@PackTimeOut 通信包超时时间;@ConnectTimeOut 心跳超时时间;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_SetServerParam(u16 PackTimeOut, u16 ConnectTimeOut);

	//获取接口状态:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_InterfaceGet(u32 devAddr, RtuInterfaceGetCallBack fun, void *pThiz, u32 &RequestID);

	//设置接口状态:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;@pList 要设置的接口状态列表;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_InterfaceSet(u32 devAddr, RtuInterfaceSetCallBack fun, void *pThiz, u32 &RequestID, const list<INTERFACE_CTL> *pList);

	//获取配置参数:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_ConfigGet(u32 devAddr, RtuConfigGetCallBack fun, void *pThiz, u32 &RequestID);

	//设置接口状态:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;@pList 要设置的配置参数列表;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_ConfigSet(u32 devAddr, RtuConfigSetCallBack fun, void *pThiz, u32 &RequestID, const list<CONFIG_ITEM> *pList);

	//Gps重启:@devAddr 设备地址;@fun 回调函数;@pThiz 回调对象;@RequestID 通信包标识号;
	//返回值>=0表示调用成功,否则失败
	s32 WINAPI Rtu_GpsReboot(u32 devAddr, RtuGpsRebootCallBack fun, void *pThiz, u32 &RequestID);
};

#endif
Dobzhansky 2014-12-30
  • 打赏
  • 举报
回复
CString 是 MFC 的, 你创建的什么类型的项目
pengzhixi 2014-12-30
  • 打赏
  • 举报
回复
头文件里面的错又不贴头文件来
赵4老师 2014-12-30
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
网上下载了emule0.50a-Xtreme8.1-sources源码,声称可以在VS2008下直接编译成功,经我实际测试,系统会报错,其中第一类错误,由于系统中为了兼容VISTA/WIN7,增加了相关定义,而这些定义在XP/WIN2003环境下会报错,共771个错误,如: 错误 2 error C2065: “ITaskbarList3”: 未声明的标识符 d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 195 emule 错误 3 error C2146: 语法错误 : 缺少“;”(在标识符“m_thbButtons”的前面) d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 196 emule 错误 4 error C4430: 缺少类型说明符 - 假定int注意: C++支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 196 emule 错误 5 error C4430: 缺少类型说明符 - 假定int注意: C++支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 196 emule 错误 6 error C2146: 语法错误 : 缺少“;”(在标识符“m_currentTBP_state”的前面) d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 198 emule 错误 7 error C4430: 缺少类型说明符 - 假定int注意: C++支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 198 emule 错误 8 error C4430: 缺少类型说明符 - 假定int注意: C++支持默认 int d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 198 emule 错误 10 error C2065: “ITaskbarList3”: 未声明的标识符 d:\emule相关资料\emule0.50a-xtreme\emule0.50a-xtreme8.1-sources\srchybrid\emuleDlg.h 195 emule ...... 此类错误中,ITaskbarList3是VISTA/WIN7环境下与任务栏相关的变量,只要屏闭掉相关定义就能正常。 除此之外还报有下面 5 个错误(实际引起错误的位置只有两个): 错误 135 error C2059: 语法错误 : “:” d:\eMule\srchybrid\BaseClient.cpp 1603 emule 错误 136 error C2065: “tagName”: 未声明的标识符 d:\eMule\srchybrid\BaseClient.cpp 1604 emule 错误 137 error C2228: “.WriteTagToFile”的左边必须有类/结构/联合 d:\eMule\srchybrid\BaseClient.cpp 1604 emule 错误 139 error C2001: 常量中有换行符 d:\eMule\srchybrid\BaseClient.cpp 4832 emule 错误 140 fatal error C1057: 宏展开中遇到意外的文件结束 d:\eMule\srchybrid\BaseClient.cpp 4832 emule 此类错误中,实际上是是两个语法错误,由于太过简单,我与网友都怀疑是作者故意制造的错误,若是完全不懂C++的人,即使拿到源码,编也会报错,从而止步于此。而稍懂C++的人(本人即是此类菜鸟),则可以找出错误之处。 为方便诸多象我一样的初学者,我把修正之后,可以在 XP/WIN2003 +VS2003SP1 环境下直接编译成功的emule0.50a-Xtreme8.1-sources源码发布上来,以便互相学习交流。
实验一:词法分析程序 一、实验目的     通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的类型码及单词符号的自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示) 二、实验要求 用C或C++写一个简单的词法分析程序,程序可以满足下列要求: 1、能分析如下几种简单的语言词法 (1) 标识符: ID=letter(letter|digit)* (2) 关键字(全部小写) main int float double char if then else switch case break continue while do for (3)整型常量:NUM=digit digit* (4)运算符 = + - * / < <= == != > >= ; ( )? : (5)空格由空白、制表符和换行符组成,用以分隔ID、NUM、运算符等,字符分析时被忽略。 2、单词符号和相应的类别码 假定单词符号和相应的类别码如下: 单词符号 种别码 int 1 = 17 float 2 < 20 if 3 <= 21 switch 4 == 22 while 5 != 23 Do 6 > 24 标识符 10 >= 25 整型常量 11 ; 26 + 13 ( 27 - 14 ) 28 * 15 ? 29 / 16 : 30 3、词法分析程序实现的功能 输入:单词序列(以文件形式提供),输出识别的单词的二元组序列到文件和屏幕 输出:二元组构成: (syn,token或sum) 其中: syn 为单词的种别码 token 为存放的单词自身符号串 sum 为整型常数 例: 源程序: int ab; float ef=20; ab=10+ef; 输出: (保留字--1,int) (标识符--10,ab) (分号--26,;) (保留字--2,float) (标识符--10,ef) (等号--17,=) (整数--11,20) (分号--26,;) (标识符--10,ab) (等号--17,=) (整数--11,10) (加号--13,+) (标识符--10,ef) (分号--26,;) 4、自己准备测试数据存放于TestData.txt文件中,测试数据中应覆盖有以上5种数据,测试结果要求以原数据与结果对照的形式输出并保存在Result.txt中,同时要把结果输出到屏幕。 5、提前准备 ① 实验前,先编制好程序,上机时输入并调试程序。 准备好多组测试数据(存放于文件TestData.txt中)。 6、写出实验报告 报告格式:要求有实验名称、实验目的、实验要求、实验内容、实验小结。 其中实验内容包括算法分析、程序流程图及程序代码。

65,201

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧