2013-02-22 25 views
0

我剛碰到一個條件,我#include一個頭,我遇到編譯錯誤,需要我#包括已包含在原始頭中的頭。在什麼情況下C++頭文件不能傳遞?

頭有以下內容:

#pragma once 

#include <atlbase.h> 
#include <atlcom.h> 

#include "itestobj.h" 

extern "C" ITestObj* WINAPI GetTestObj(); 

然後我得到了一堆ATL相關的編譯錯誤,當我對那個代碼是通過在C++文件atlbase.hatlcom.h除了解決以上標題。

爲什麼通常情況下不包括這些標題?

+0

也許你需要'#include '而不是那些內部文件? – 2013-02-22 03:30:01

+0

錯位預編譯頭文件(stdafx.h)就是這樣一個陷阱。它必須先包含#included。 – 2013-02-22 04:29:59

回答

0

很可能,這些標題中至少有一個包含您在文章中顯示的文件。由於#pramga once告訴你的編譯器只包含一次,它會停止,你不會得到所有的聲明。

+0

但是,是不是仍然表明我應該從'#pragma once'排除的包含中獲得'atlbase.h'和'atlcom.h'? – dlanod 2013-02-22 04:00:15

+0

這真的取決於你從cpp文件包含哪個頭文件。 – bitmask 2013-02-22 12:33:03

相關問題