http://m.blog.csdn.net/blog/EbowTang/37767509
2014-7-14阅读226 评论0
本文目的:整理与收集!解决方法一般来自于网络!有些问题可能不是在vs2010中发生的(有的是在vc6.0)!
参考资源:《精通MFC编程》,“谷歌大神”
问题一:error C2440 “static_cast” 无法从“void (__thiscall CPppView )(void)...
不能转换void (_thiscall CMainFrame::*)(void)to LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)2014-07-13 11:35开发平台由VC6.0升级至VS2010,需要将原有的项目迁移,可能碰到类似错误:
error C2440: 'static_cast' : cannot convert from 'void (__thiscall CMainFrame::* )(void)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'
VS2010对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2010下编译不通过
ON_MESSAGE(WM_message,OnMyMessage);
OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);如果不符合,则有错误提示:
error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目标类型的范围内没有具有该名称的函数
error C2440: “static_cast”: 无法从“void (__thiscall CPppView::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目标类型的范围内没有具有该名称的函数
解决方法如下:
首先,把原来的消息函数返回值类型改为LRESULT,函数内可以随便写个return TRUE; 然后消息函数的参数必须改写成(WPARAM wParam,LPARAM lParam)而不论这两个参数是否用得到;最后,消息映射如ON_MESSAGE(WM_message,& OnMyMessage)
问题二:编译链接时提示找不到预编译头
通常,直接向工程文件里加入一个.cpp 源文件后,编译链接时总是提示找不到预编译头,此时就需要在源文件头部添加如下的包含语句:
#include "stdafx.h" 说明 在添加stdafx.h包含语句后,最好也加上应用头文件的包含语句。
在实际开发中,也常常遇到如下的情况。向类中添加的成员变量或成员函数不能在ClassView中显示。不能通过双击成员变量或成员函数转移至变量或函数定义的位置。一般情况下,在输入一个类的对象后,按下“.”后将会出现该类的成员变量和成员函数;或者当输入一个类对象或结构的指针时,按下“>”后也将会出现该类的成员变量和成员函数。这也是Visual C++编译器所固有的功能,可是会发现这两种功能经常不能使用。当出现上述几种情况时,首先关闭工程,然后删除工程文件夹下的.ncb 文件,最后打开工程重新编译即可恢复原有的功能。
通常,需要从工程中删除一个不再使用的类,删除类的方法很有讲究,如果不能彻底地删除,将会产生莫名其妙的错误。一般可以按照如下的方法进行。首先在工作区的FileView中选中该类的.h 和.cpp 文件,按Delete键删除,然后在工程的文件夹下将这两个文件删掉,并且把.clw文件也删除(如果不删除此文件,也可以再次运行ClassWizard,这时出现“是否移走该类”的提示,选择remove也可以)即可。在删除.clw文件文件之后,再次使用类向导时将会弹出“.clw 文件不存在”的提示,这时可以按照弹出的提示从工程中的文件创建一个.clw文件文件即可。另外,还需要把引用该类头文件的包含语句删除,否则也将出现错误。
实践中,经常会发现在对某个类作出一系列的操作(如添加成员、响应消息等)后该类竟然从ClassView中消失了,可是并没有任何与该类相关的文件删除操作。其实这是Visual C++的一个bug。遇到这种情况时,一般只需要打开该类对应的头文件,将其类名改一下,然后再恢复这个类的类名称即可,或者在定义类的“class”以及继承类型的关键字之间,随意敲上一个空格或者删除一个空格,也可以达到同样的效果。
问题六:25960指的是什么?怎么得到的?
完整例子为:
// CTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char str[]="hello"; char *p1=str; short int *p2=reinterpret_cast<short int*>(p1);//强制类型转换 cout<<*str<<endl;//h cout<<str[0]<<str[1]<<endl;//he cout<<str<<endl;//hello cout<<p1<<endl;//hello cout<<*p1<<endl;//h cout<<p2<<endl;// cout<<*p2<<endl;//25960 cout<<sizeof( short int )<<endl;//2 cout<<sizeof(char)<<endl;//1 system("pause"); return 0; }
未得到解决.....................