2012-08-07 59 views
4

我有簡單的測試控制檯應用程序。我試圖使用simple.h文件中定義的函數nike2,並且在simple.cpp中實現。 simple.h和simple.cpp文件都位於與主項目不同的目錄中。使用頭文件和StdAfx.h

我在項目資源管理器中添加simple.h到「頭文件」和simple.cpp到「源文件」(我不知道它是需要)

控制檯應用程序:

#include "stdafx.h" 
#include "..\..\simple.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
nike2(5); 
return 0; 
} 

Simple.h

#include <cstdlib> 
#include <iostream> 

#ifndef MEMORY 
#define MEMORY 

int var; 
int nike2(int f); 

#endif /*MEMORY*/ 

Simple.cpp

#include <cstdlib> 
#include <iostream> 
#include "simple.h" 


int nike2(int f) 
{ 
return 0; 
} 

雖然編譯我得到錯誤:

Error 4 error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source? c:\c\simple.cpp 11 1 usingHeader 

爲什麼?什麼是魔術「StdAfx.h」用於?

UPD

simple.cpp現在看起來這種方式,但仍然有同樣的錯誤

#include "C:\c\usingHeader\usingHeader\stdafx.h" 
#include <cstdlib> 
#include <iostream> 
#include "simple.h" 


int nike2(int f) 
{ 
return 0; 
} 
+1

'我在項目資源管理器中添加了simple.h頭文件和simple.cpp源文件(我不確定是否需要)'不,不需要,Header和Source過濾器只是可視化的過濾器並不匹配任何實際目錄模式的功能模式,它只是可視化和分類到Visual Studio IDE中。順便說一句:我認爲你不需要「StdAfx」。 – 2012-08-07 14:09:33

+0

如果我需要StdAfx,我需要添加它將其包含到simple.cpp中?爲了讓comiler開心,我必須寫一些類似'#include「的C:\ c \ usingHeader \ usingHeader \ stdafx.h」'? – vico 2012-08-07 14:28:45

+0

@user不,只需添加'#include「stdafx.h」'就像消息所示。該文件將在您的項目目錄中,並且不需要完整的路徑。 – 2012-08-07 15:36:44

回答

7

Stdafx.h用於製造預編譯頭。它包含一些最常用和最常用的include

這主要是爲了加快編譯過程,因爲WinAPI是一個很重要的東西

您還可以檢查this question,它有一個更詳細的答案。

+0

我添加了#include'C:\ c \ usingHeader \ usingHeader \ stdafx.h'到simple.cpp,但沒有任何改變 - 仍然有這個錯誤。 – vico 2012-08-07 14:36:35

2

stdafx.h包含標題包含您不希望更改的內容。像標準庫這樣的東西包含在stdafx.h中,所以它們只需要編譯一次。你應該在任何你需要的地方包含stdafx.h。如果您不想使用它,可以在項目首選項中關閉它。

+0

我不會推薦禁用在Visual Studio上使用預編譯頭文件,因爲它會加快編譯速度。即使你包含在stdafx中。h std使用的頭文件,並且您只能獲得很多加速 – Ghita 2012-11-28 20:03:40

2

What is magic "StdAfx.h" used for?

它用於Visual Studio中的預編譯頭文件。

您可以將它包含在您的.cpp文件中,也可以選擇「不使用預編譯頭文件」來獲取那些不需要包含所有Windows頭文件的文件。