我的项目A
包含具有类定义和实现MyClass.h
和MyClass.cpp
的源文件。 MyClass
正在使用CString
。
现在我决定创建一个新项目B
,它是用于测试MyClass
目的的简单控制台应用程序。在解决方案资源管理器中,我从MyClass
项目位置向我的项目添加了A
标头和cpp文件。直到这一刻我还不知道我必须使用MFC
来使用CString
。我试图建立项目并得到错误,据我所知,要求使用MFC。
#error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
要了解发生了什么,我决定删除MyClass,并在同样使用MyCLass2
的项目B
中创建简单的CString
。构建B
后,我遇到了错误,如
Error 22 error C2061: syntax error : identifier 'CString'
MyClass
和MyClass2
中的包含相同。
为什么在MyClass案例中我被要求添加MFC
lib?我想在这种情况下编译器知道什么是CString
。它怎么知道的?
当系统不了解MyClass2
时,我希望得到与使用CString
进行编译时相同的结果。
答案 0 :(得分:3)
如果在ATL申请中使用:
CString,CStringA和CStringW从MFC DLL导出 (MFC90.DLL),绝不是来自用户DLL。这样做是为了防止CStringT 从多重定义。
来源:http://msdn.microsoft.com/en-us/library/5bzxfsea.aspx
如果要在不链接到MFC的情况下使用,则可以使用以下类:CAtlString,CAtlStringA和CAtlStringW。
答案 1 :(得分:1)
MyClass
和MyClass2
都包含stdafx.h
,这两个项目不同。
你可以做的是重命名/删除属于项目A的stdafx.h
并查看编译错误的位置。