在什么条件下C++头是不可传递的

Under what conditions are C++ headers not transitive?

本文关键字:可传递 条件下 C++ 在什么      更新时间:2023-10-16

我刚刚遇到一个条件,我#包含了一个标头,我遇到了编译错误,需要我#包含原始标头中已经包含的标头。

标题包含以下内容:

#pragma once
#include <atlbase.h>
#include <atlcom.h>
#include "itestobj.h"
extern "C" ITestObj* WINAPI GetTestObj();

然后,当我针对这些错误进行编码时,我会得到一堆与ATL相关的编译错误,这些错误通过在C++文件中除了上面的头之外还包括atlbase.hatlcom.h来解决。

为什么没有像通常情况下那样包含这些标头?

很可能,这些标题中至少有一个包含了您在帖子中显示的文件。由于#pramga once告诉编译器只包含它一次,所以它停止,您不会得到所有声明。