#include被忽略

时间:2010-06-23 17:24:30

标签: c++ cstring

所以,

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

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

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

然而,有错误。 (CString没有被识别为类型。)所以,我决定确保它完成所有包含。所以,我在#include之后添加了另一条#pragma消息,并且没有打印该消息。

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

3 个答案:

答案 0 :(得分:1)

您的解释有点难以理解,但我认为您正在遇到正常编译和预编译标题之间的差异。

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将我的评论传递给答案。

VS中的CString 6次是一个类,之后它变成了一个模板。也许它有什么应有的?

  

问题与使用有关   使用CString的typedef。发布VS 6,   那是不可能的。我改变了   手工引用,并编译   现在