| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3889 人关注过本帖
标题:C++6.0上编译的程序如何在Visual Studio 2012里编译
只看楼主 加入收藏
asblue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
C++6.0上编译的程序如何在Visual Studio 2012里编译
我原来代码能在VC++编译通过,但是现在想在visual studio2012编译怎么改了 一直提示错误。新手不知道如何做了。。


>f:\c++ test\mytport\mytport\port.cpp(119): error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6702): 可能是“int AfxMessageBox(LPCTSTR,UINT,UINT)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6704): 或       “int AfxMessageBox(UINT,UINT,UINT)”
1>          尝试匹配参数列表“(const char [12])”时
1>f:\c++ test\mytport\mytport\port.cpp(130): error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6702): 可能是“int AfxMessageBox(LPCTSTR,UINT,UINT)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6704): 或       “int AfxMessageBox(UINT,UINT,UINT)”
1>          尝试匹配参数列表“(const char [13])”时
1>f:\c++ test\mytport\mytport\port.cpp(153): error C2664: “CMutex::CMutex(BOOL,LPCTSTR,LPSECURITY_ATTRIBUTES)”: 不能将参数 2 从“char [16]”转换为“LPCTSTR”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:\c++ test\mytport\mytport\port.cpp(156): error C2664: “wsprintfW”: 不能将参数 1 从“char [16]”转换为“LPWSTR”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:\c++ test\mytport\mytport\port.cpp(160): error C2664: “CreateFileW”: 不能将参数 1 从“char [16]”转换为“LPCWSTR”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>f:\c++ test\mytport\mytport\port.cpp(165): error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6702): 可能是“int AfxMessageBox(LPCTSTR,UINT,UINT)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6704): 或       “int AfxMessageBox(UINT,UINT,UINT)”
1>          尝试匹配参数列表“(const char [13])”时
1>f:\c++ test\mytport\mytport\port.cpp(236): error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6702): 可能是“int AfxMessageBox(LPCTSTR,UINT,UINT)”
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\atlmfc\include\afxwin.h(6704): 或       “int AfxMessageBox(UINT,UINT,UINT)”
1>          尝试匹配参数列表“(const char [17])”时
1>f:\c++ test\mytport\mytport\port.cpp(491): error C2664: “MessageBoxW”: 不能将参数 2 从“const char [24]”转换为“LPCWSTR”
搜索更多相关主题的帖子: microsoft include visual files 
2015-04-11 20:45
天使梦魔
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:10 
把所有字符引号前加大写L
或者
打开工程属性(alt+F7),配置属性,常规,字符集
修改成另外的
2015-04-12 09:52
asblue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-11
收藏
得分:0 
竟然提示错误(error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型)。

   代码:

   1   void CMouseMoveView::OnAppExit()
   2   {
   3     // TODO: 在此添加命令处理程序代码
   4     if(AfxMessageBox("是否真的要退出当前程序?",MB_YESNO)==IDYES)
   5     AfxGetMainWnd()->SendMessage(WM_CLOSE);
   6    }

 办法1: 将第4行改为:if(AfxMessageBox(_T("是否真的要退出当前程序?"),MB_YESNO)==IDYES)

       或者将第4行改为:if(AfxMessageBox(L"是否真的要退出当前程序?",MB_YESNO)==IDYES)

 办法2:选择“项目”菜单->项目属性->配置属性->常规->字符集,改为“未设置”即可。


这是因为vs2005默认使用的是unicode字符编码集,而unicode要占2byte,通常的字符只占1byte,所以导致无法转换,故需要加上 _T 或 L 进行转换。


我是2012版的 我是1:先改选择“项目”菜单->项目属性->配置属性->常规->多字字符集,

:2:在字符串前加上"_T".如
 AfxMessageBox(_T("按下HOME键"));
2015-04-12 19:45
asblue
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-11
收藏
得分:0 
有时还会遇到次错误
使用vs2012,遇到如下错误。

1>------ 已启动生成: 项目: 20130925, 配置: Debug Win32 ------
1>  stdafx.cpp
1>d:\code\20130925\20130925\stdafx.cpp(18): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          d:\vs2012\vc\include\stdio.h(218) : 参见“fopen”的声明
1>  20130925.cpp
1>  正在生成代码...
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

 

解决方案,项目 ->属性 -> c/c++ -> 预处理器 -> 点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS,即可。
2015-04-12 19:49
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:10 


我一个个帮你解答:
1)error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型

后面是编译器认为你的参数必须符合下面二个类型中的一个:
int AfxMessageBox(LPCTSTR,UINT,UINT)  或者 int AfxMessageBox(UINT,UINT,UINT)
你显然在原来的代码里没有这样写,找到它,修改一下。

2) error C2664: “CMutex::CMutex(BOOL,LPCTSTR,LPSECURITY_ATTRIBUTES)”: 不能将参数 2 从“char [16]”转换为“LPCTSTR”

这个很简单,你找到那个代码行所在,在这个函数里的参数前面加一个 (LPCTSTR),强制让编译器觉得无可挑剔就行。

3) error C2664: “wsprintfW”: 不能将参数 1 从“char [16]”转换为“LPWSTR”

这个,你按照上面二楼版主所说,把编译字符集改成 Use Multi-Byte Character Set 就应该不报错了。

4) error C2664: “MessageBoxW”: 不能将参数 2 从“const char [24]”转换为“LPCWSTR”

这个,在上面改成多位字符集后,还需要在函数里的参数前面加一个 (LPCTSTR) 强制类型转换,原理同第二点。
2015-04-13 12:41
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
收藏
得分:0 
最后的那个 error C4996: 'fopen': This function or variable may be unsafe.

它只是个警告,你可以不去理它,它的意思是:fopen() 函数不是安全函数,最好修改成 fopen_s(),愿意改就改,不愿意就不理它。
2015-04-13 12:44
快速回复:C++6.0上编译的程序如何在Visual Studio 2012里编译
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026477 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved