Visual c++ 你们好;。";头文件能够;见;其对应的“文件”的内容;。cpp“;文件夹?

Visual c++ 你们好;。";头文件能够;见;其对应的“文件”的内容;。cpp“;文件夹?,visual-c++,intellisense,Visual C++,Intellisense,首先,让我提供一点背景来解释这个问题的动机: 我一直认为,C++中的

首先,让我提供一点背景来解释这个问题的动机:

<>我一直认为,C++中的<<代码>包含指令具有在指令出现的点插入包含文件的内容的净效果。

例如,当预处理器遇到
#include“myInclude.h
时,它只需将该指令替换为文件
myInclude.h
中的内容即可

今天早些时候,当我在Microsoft Visual Studio 2019中编辑一些代码时,IntelliSense功能将标题中的类声明标记为未定义的,直到我将该标题包含在相应的.cpp文件中,你可以想象我的惊讶

以下是涉及的具体文件:

// myInclude.h
#pragma once
class MyDlg : public CDialogImpl<MyDlg>
{
// Omitted code
};
//myInclude.h
#布拉格语一次
类MyDlg:公共CDialogImpl
{
//省略代码
};
//myInclude.cpp
#包括“stdafx.h”

#include“myInclude.h”//文件没有眼睛,因此它们都看不到另一个。IDE有一个编译器(在某些语言中称为kibitz编译器)它在内存中编译代码并了解符号-这就是Intellisense的工作原理。我想我不明白为什么在myInclude.cpp中包含myInclude.h可以让myInclude.h在stdafx.h中看到头,因为myInclude.h中没有指定include?正如我所说,后台编译器了解符号。它知道它找到的符号它是在stdafx.h中定义的,并且已经意识到您没有在需要它的地方包含它,所以它告诉您如何在实际编译器运行和发生错误之前修复它。Intellisense就是这样工作的-它被设计来做这类事情来定位可用的符号。它是IDE/编译器特定的功能;Delphi是d C++Builder IDE也有类似(但不完全相同)的功能。感谢您的解释;我想我已经开始理解了。因此,在后台编译器看到无法访问的符号(在本例中是在标题中)时,这更像是一种检查如果报头没有触发警告的任何引用,但至少添加了一个对报头的引用(以便可以访问stdafx.h文件)然后错误消失了?我想知道是否有第二个cpp文件包含头文件,但没有包含stdafx头文件,如果它会在头文件中保留警告?
// myInclude.cpp
#include "stdafx.h"
#include "myInclude.h" // <-- if this line is here, intellisense in myInclude.h is happy
                       //     but if commented out, CDialogImpl is undefined

// Omitted implementation code
// stdafx.h
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
//... ommited headers