读书人

如何会无法转换参数1从#039;struct DEVICE

发布时间: 2012-03-29 12:53:13 作者: rapoo

怎么会无法转换参数1从'struct DEVICEPARAM *const * ' to 'struct DEVICEPARAM *const '
错误消息:
cannot convert parameter 1 from 'struct DEVICEPARAM *const * ' to 'struct DEVICEPARAM *const '

long _stdcall LED_Open(const PDeviceParam param, long Notify, long Window, long Message);

typedef struct DEVICEPARAM{
long devType; //device type
long speed; //speed only use for rs232
long locPort; //rs232: COM port UDP: local port
long rmtPort; //remote port only use for UDP
long reserved[8];
}TDeviceParam;
typedef TDeviceParam * PDeviceParam;

dev=LED_Open(&param, 1, NULL, WM_LED_NOTIFY);//在些出错


[解决办法]
肯定是实参的类型写错啊 报错很明显 cannot convert parameter 1 from 'struct DEVICEPARAM *const * ' to 'struct DEVICEPARAM *const '

一个是struct DEVICEPARAM *const * 是二级指针
struct DEVICEPARAM *const 是一级指针
[解决办法]
建议阅读《C语言陷阱与缺陷》。
[解决办法]
const PDeviceParam param 首先搞清楚const修饰符修饰的是param指向的对象还是修饰的param指针本身?答案是修饰的param指针本身,不是param指针指向的对象

typedef TDeviceParam * PDeviceParam;这个定义就说明了PDeviceParam是一个定义TDeviceParam类型的指针类型,比如:PDeviceParam a;那么变量a就是一个指向TDeviceParam类型的指针,如果加上const修饰呢,
比如:
const PDeviceParam b;
PDeviceParam const d;
那么const修饰的是指针b或d本身,

在跟下面的相似:
const char *p;
char const *p;
char * const p;
const位于*的左边,那么const修饰的是 P指向的对象,const 位于*的右边,那么const修饰的是指针本身

long _stdcall LED_Open(const PDeviceParam param, long Notify, long Window, long Message); 对于这个函数,const TDeviceParam *param;你用了一个指向const对象的指针传递给了一个 接受const指针的参数,发生编译错误

所谓指向const对象的指针,就是该指针指向的对象是const,而该指针可以改变,可以指向另一个同类型的不同的对象
所谓const指针,就是该指针是const,指针指向的对象可以改变,但该指针不能改变,只能指向这一个对象

读书人网 >C++

热点推荐