r warning C4312: 'type cast' : conversion from 'unsigned long' to 'void *' of greater size

Sigger 2008-12-15 08:46:58
下面是源码:
#ifndef COIN_SBINTLIST_H
#define COIN_SBINTLIST_H
#include <Inventor/lists/SbPList.h>

class COIN_DLL_API SbIntList : public SbPList {
public:
SbIntList(void) : SbPList () { }
SbIntList(const int sizehint) : SbPList(sizehint) { }

void append(const int item) {
((SbPList*)this)->append((void*)((unsigned long)item));
}
int find(const int item) {
return ((SbPList*)this)->find((void *)((unsigned long)item));
}
void insert(const int item, const int addbefore) {
((SbPList*)this)->insert((void *)((unsigned long)item), addbefore);
}
int & operator[](const int idx) const {
return (int&) ((*(const SbPList*)this)[idx]);
}
};

#endif // !COIN_SBINTLIST_H

其中红色部分产生了题目中的警告,不知道怎么去除警告,大家帮下吧?
...全文
525 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜子儿 2008-12-15
  • 打赏
  • 举报
回复
const 是“最靠近”为原则
指向整数常量的指针:const int * p;它所指向的值只读不能被修改 *p = 4(错误),p = 5(正确)
指向一个整数的常量指针:int * const p;不允许修改指针变量的值,*p = 5 (正确),p = 5 (错误)

似乎又是你對item的類型進行轉變的時候出問題的。。。。

我也學習中。。。。。
菜子儿 2008-12-15
  • 打赏
  • 举报
回复

涉及void *的:
c 中void *类型可赋值给任何类型的指针,反之亦然
c++ 中都需要强制转换
void * 可似为无穷大能接纳任何类型赋值,反之不行int * p =9;void * t= p(正确);p=t(错误);

這里是warning,應該是數據類型轉換-----從'unsigned long' 轉換成'void *'時產生的, unsigned類型強制轉換成void*
nullah 2008-12-15
  • 打赏
  • 举报
回复
MARK

65,211

社区成员

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

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