VS2010中,error C2440 :初始化解决方法
VS2010中,error C2440 :初始化
error C2440: “初始化”: 无法从“void (__cdecl *)(uint8_t *,uint8_t *)”转换为“void (__cdecl *)(void *,void *)”
请问这是什么错误,怎么修改呢?
struct ArrayDescriptor {
const XsSize itemSize;
void (*itemSwap)(void* a, void* b);
void (*itemConstruct)(void* e);
void (*itemCopyConstruct)(void* e, void const* s);
void (*itemDestruct)(void* e);
void (*itemCopy)(void* to, void const* from);
int (*itemCompare)(void const* a, void const* b);
};
typedef struct ArrayDescriptor arrayDescriptor;
typedef struct Array Array;
\copydoc ArrayDescriptor::itemSwap \note Specialization for uint8_t
void swapUint8(uint8_t* a, uint8_t* b)
{
uint8_t tmp = *a;
*a = *b;
*b = tmp;
}
//! \copydoc ArrayDescriptor::itemCopy \note Specialization for uint8_t
void copyUint8(uint8_t* to, uint8_t const* from)
{
*to = *from;
}
//! \copydoc ArrayDescriptor::itemCompare \note Specialization for uint8_t
int compareUint8(uint8_t const* a, uint8_t const* b)
{
if (*a < *b)
return -1;
if (*a > *b)
return 1;
return 0;
}
ArrayDescriptor const g_xsByteArrayDescriptor = {
sizeof(uint8_t),
XSEXPCASTITEMSWAP swapUint8 ,
0,
XSEXPCASTITEMCOPY copyUint8,
0,
XSEXPCASTITEMCOPY copyUint8,
XSEXPCASTITEMCOMP compareUint8
};
------解决思路----------------------
无法将 uint8_t*转换为void*。类型不一致。
------解决思路----------------------
将所有void*替换为uint8_t*
------解决思路----------------------
考虑在代码最上面加一句,试试:
#define uint8_t (unsigned char)
------解决思路----------------------
都已经有typede了就不应该再加上这define。只用一个就行了。
你说的函数指针没法转换的问题,你会定义函数指针类型吗?定义一个函数指针类型,将出问题的函数指针强制转换
------解决思路----------------------
error C2440: “初始化”: 无法从“void (__cdecl *)(uint8_t *,uint8_t *)”转换为“void (__cdecl *)(void *,void *)”
对于这种错误。可以定义一个函数指针类型
typedef void(*pfunc)(void *,void *);
在这句前面加上
XSEXPCASTITEMSWAP (pfunc)swapUint8 ,//强制函数指针转换
就可以了
PS:你直接引用,我就知道了,不用私信给我。
error C2440: “初始化”: 无法从“void (__cdecl *)(uint8_t *,uint8_t *)”转换为“void (__cdecl *)(void *,void *)”
请问这是什么错误,怎么修改呢?
struct ArrayDescriptor {
const XsSize itemSize;
void (*itemSwap)(void* a, void* b);
void (*itemConstruct)(void* e);
void (*itemCopyConstruct)(void* e, void const* s);
void (*itemDestruct)(void* e);
void (*itemCopy)(void* to, void const* from);
int (*itemCompare)(void const* a, void const* b);
};
typedef struct ArrayDescriptor arrayDescriptor;
typedef struct Array Array;
\copydoc ArrayDescriptor::itemSwap \note Specialization for uint8_t
void swapUint8(uint8_t* a, uint8_t* b)
{
uint8_t tmp = *a;
*a = *b;
*b = tmp;
}
//! \copydoc ArrayDescriptor::itemCopy \note Specialization for uint8_t
void copyUint8(uint8_t* to, uint8_t const* from)
{
*to = *from;
}
//! \copydoc ArrayDescriptor::itemCompare \note Specialization for uint8_t
int compareUint8(uint8_t const* a, uint8_t const* b)
{
if (*a < *b)
return -1;
if (*a > *b)
return 1;
return 0;
}
ArrayDescriptor const g_xsByteArrayDescriptor = {
sizeof(uint8_t),
XSEXPCASTITEMSWAP swapUint8 ,
0,
XSEXPCASTITEMCOPY copyUint8,
0,
XSEXPCASTITEMCOPY copyUint8,
XSEXPCASTITEMCOMP compareUint8
};
------解决思路----------------------
无法将 uint8_t*转换为void*。类型不一致。
------解决思路----------------------
将所有void*替换为uint8_t*
------解决思路----------------------
考虑在代码最上面加一句,试试:
#define uint8_t (unsigned char)
------解决思路----------------------
都已经有typede了就不应该再加上这define。只用一个就行了。
你说的函数指针没法转换的问题,你会定义函数指针类型吗?定义一个函数指针类型,将出问题的函数指针强制转换
------解决思路----------------------
error C2440: “初始化”: 无法从“void (__cdecl *)(uint8_t *,uint8_t *)”转换为“void (__cdecl *)(void *,void *)”
对于这种错误。可以定义一个函数指针类型
typedef void(*pfunc)(void *,void *);
在这句前面加上
XSEXPCASTITEMSWAP (pfunc)swapUint8 ,//强制函数指针转换
就可以了
PS:你直接引用,我就知道了,不用私信给我。