错误C2061:语法错误:标识符'CString'和错误C2065:'CString':未声明的标识符
答案:由于您正在开发Win32控制台应用程序,因此您无法获得为不同项目类型添加的样板代码。
请在预编译的头文件后面的代码中包含<atlstr.h>。
嗨,
你能不能请问,我有哪些头文件可以包含在VC ++ 6.0中使用CString?Win32 DLL。我在网上看,我找不到一个有效的。一个建议使用AFX.h,另一个建议我们#include <stdafx.h>但我的项目已经有#include <stdafx.h>并且它还有#include <windows.h>,我也试过#include“fstream 。H” ; 但是我仍然得到编译错误
隐藏 复制代码
<span style="color:#111111"><span style="color:#000000">error C2061: syntax error : identifier 'CString'
error C2065: 'CString' : undeclared identifier</span></span>
Richard MacCutchan 5月19日 - 11月5:17
CString是ATL / MFC的一部分; 这是一个ATL / MFC项目,你是否安装了支持库?
drcool23 5月19日 - 11月5:38
是的,这是MFC项目。CString正在另一个模块中工作。在那里我看到他们使用的额外头文件是#include“fstream.h”。请让我知道解决方案是什么。这个项目是VC ++ 6.0吗?Win32 DLL。
3解决方案
我认为你没有在你的项目中使用MFC。
一种解决方案是使用
<span style="color:#111111"><span style="color:#000000">#include <atlstr.h></span></span>
drcool23 5月19日 - 11月5:30
嗨,谢谢你的回复。包含#include <atlstr.h>后,我得到了致命错误“致命错误C1083:无法打开包含文件:'atlstr.h':没有这样的文件或目录”。我没有使用ATL,但是,我正在使用MFC。如果您有任何其他建议/解决方案,请告诉我。
CPallini 19年5月19日上午5:35
如果您在DLL中使用MFC,那么应该没有任何问题(并且您不需要ATL)。无论如何,你说你正在构建一个Win32 DLL,而不是一个MFC。BTW通常Win32 DLL导入/导出字符串为LPSTR,你为什么不遵循这条路径?
作为最后的结果,你可以尝试David Ching的建议:
http ://www.eggheadcafe.com/software/aspnet/31827704/using-cstring-object-in-non-mfc-programs.aspx
ShilpiP 5月19日 - 11月5:48
Cpallini是对的。我们不能在VC6.0中使用。如果您使用MFC而不是您没有收到此错误。
您可以在项目属性中检入 - > genral。有一个标签Microsoft Foundation Class。
我在VC6.0中所做的一个解决方案是使用basic_string。它有字符串和wstring。
CPallini 19年5月19日上午5:32
但是,您不能将它与VC6一起使用(我相信您可以从Visual Studio 2003开始使用它)。
ShilpiP 5月19日 - 11月5:39
哦,是的,我在VS2005中这样做。谢谢
两种方式:解决方案1
隐藏 复制代码
<span style="color:#111111"><span style="color:#000000">#include <string.h></span></span>
要么
隐藏 复制代码
<span style="color:#111111"><span style="color:#000000">#include <cstring></span></span>
后者将CString作为Std命名空间的一部分。
drcool23 19年5月19日上午5:26
嗨,谢谢你的回复。我试过这个解决方案。但是,它不起作用。存在相同的错误。
CPallini 5月19日 - 11月5:28
不,CString不是std命名空间的一部分,正如Richard正确指出的那样,CString是一个ATL / MFC类。
drcool23 5月19日 - 11月5:40
这是MFC项目。CString正在另一个模块中工作。在那里我看到他们使用的额外头文件是#include“fstream.h”。请让我知道解决方案是什么。这个项目是VC ++ 6.0吗?Win32 DLL。
Stefan_Lang 19-May-11 7:09 am
我不能肯定地说,但我认为CString是在VS 2003中引入的,所以VC ++ 6甚至可能都没有。
或者,如果它在VC 6中,它可能只包含在命名空间ATL中,因此您可以尝试使用ATL :: CString,或者
使用ATL 插入该行;
您还可以尝试使用早期名称CAtlString(或ATL :: CAtlString?我不知道该类是否实际使用了命名空间)。
如果这两者都不起作用,那么你很可能已经拥有了VC ++的新版本。
PS:在搜索ATL :: CString的更多信息时,我发现它与MFC :: CString不完全相同。也似乎有些人一直在使用两者,
- 解决方案3
我发现以下文章表明你应该能够在VC 6中使用CString(与我在OriginalGriffs解决方案中的初始评论中的假设相反):
将MFC的CString类添加到没有MFC依赖关系的ATL中