0

所以,

我有这个代码,我正在尝试更新。它是为 Visual Studio 6 编写的,我正试图让它在 Visual Studio 2010 中编译。

在 stdafx.h 中,它包括 afx.h 和 afxwin.h 以及程序运行所需的一些其他内容。值得注意的是,在其他头文件中使用了 CString。

在 stdafx.h 中包含的顶部,我添加了 #pragma 消息,以验证它是否首先被编译。头文件的顶部也有一个引发错误。我可以从编译器输出中看到 stdafx.h 首先被编译,所以这很好。

但是,出现了错误。(CString 没有被识别为一种类型。)所以,我决定确保它通过所有的包含。因此,我在#include 之后添加了另一条#pragma 消息,并且该消息未打印。

这是否意味着实际上并未包括在内?

4

3 回答 3

1

您的解释有点难以理解,但我认为您遇到了正常编译和预编译头文件之间的差异。

使用预编译的头文件,编译器正常处理第一个文件(新项目向导为此设置 stdafx.cpp)。在处理项目选项中为预编译控制设置的包含文件(通常为 stdafx.h)后,编译器将其状态保存到 .pch 文件中。

对于每个其他文件,编译器会在不进行任何处理的情况下浏览该文件,只查找包含文件。然后它读取 .pch 文件,加载保存的状态,并继续正常解析和编译。

这种设计的一个结果是 stdafx.cpp 中的上述任何行都#include "stdafx.h"成为状态的一部分,并且可以被所有其他文件看到。其他文件中的上述#include "stdafx.h"行将被忽略。

于 2010-06-23T17:33:34.633 回答
0

将我的评论传递给答案。

VS 6 中的 CString 是一个类,后来它变成了一个模板。也许它与此有关?

问题与将 typedef 与 CString 一起使用有关。发布 VS 6,这是不可能的。我只是手动更改了引用,现在可以编译了。

于 2010-06-23T17:42:28.760 回答
0

问题与将 typedef 与 CString 一起使用有关。发布 VS 6,这是不可能的。我只是手动更改了引用,现在可以编译了。

于 2010-06-23T17:34:02.323 回答