2011-05-18 30 views
0

我的Visual Studio 2008下工作的,也許這是很重要的。 在一個較大的項目中,我決定將我的一個.cpp文件分成兩部分。我走過去的一些功能到一個新的文件,讓我們稱之爲new.cpp,並試圖編譯,我得到的錯誤,new.cpp不知道fstreams定義,setw(),等等。現在,在新的文件,我的最頂端包括我自己的頭,讓我們稱之爲main_header.h,又包括所有必要的<iostream><iomanip>,等等這一切正常貫穿所有在這個項目中使用的舊文件,但由於某種原因在new.cpp不一樣。VS 2008 - 標題的一些部分不包括在內?

如果我在new.cpp添加

#include <fstream> 
#include <iomanip> 
// and all the rest 

那麼所有工作得很好,但是這不是我想怎麼解決這個問題。 我認爲main_header.h的內容在編譯時不會附加到new.cpp,但事實並非如此,我試圖在new.cpp中使用一個在main_header.h中聲明的外部變量,並且在另一個不同的.cpp中定義了它,並且在編譯,鏈接,或跑步。然而,這似乎是<fstream><iomanip>列入main_header.h不使其向new.cpp文件。

我是比較新的Visual Studio中,所以解決我的問題則可能是愚蠢的,我不知道,但我花了好一會兒想出來無濟於事明白這一個。新的文件肯定是這個項目的一部分,因爲建設項目試圖編譯它,再加上一次我有iostreamiomanip在這個new.cpp我可以調用它的程序在項目的其他部分。任何想法我可能做錯了什麼?

main_header.h看起來像

#ifndef MAIN_HEADER 
#define MAIN_HEADER 

#include <iomanip> 
#include <fstream> 
// loads of other stuff 

#endif // for MAIN_HEADER 



更新:好了,以後的日子,我創建使用相同的文件,一個全新的項目,現在一切工作正常,我並不需要包括iomanip在new.cpp中也沒有其他的東西。它確實與VS的某些古怪事物沒有代碼本身相關,但仍然在擊敗我究竟是什麼問題。

+0

注意諸如「#include」stdafx.h「,#pragma hdr stop」等類似於每個「working」.cpp文件中出現的魔法內容。 – sharptooth 2011-05-18 07:33:59

+0

不,似乎並非如此,其他大多數.cpp也只包含#include「main_header.h」,並且工作得很好。 – Puchatek 2011-05-18 07:37:54

+0

@sharptooth,@Eli - 經過一番進一步的討論後,似乎必須特別針對'fstream'和'iomanip'。我試着從'main_header.h'中包含的'cmath'調用函數,並且工作得很好。 – Puchatek 2011-05-18 08:11:48

回答

1

這可能是由前綴頭文件或預編譯頭文件引起的,這些頭文件可以在整個項目中設置,也可以只在new.cpp文件中設置,這也許可以解釋爲什麼會有一些差異。這裏有幾件事情要嘗試:

  • 屬性 - > C++ - >預編譯頭:檢查整個項目的設置和單個文件
  • 屬性 - > C++ - >高級 - >力包括:檢查這是在文本編輯器都
  • 打開vcproj文件一樣,找到new.cpp節點 - 這是尋找如果單個文件有不同的編譯器設置
  • 屬性的快捷方式 - > C++ - >預處理器 - >生成預處理文件:這將生成一個包含所有#includes和宏的中間文件new.i已解決。比較這兩個文件的結果,並尋找差異 - 這可能表明爲什麼一個工作,其他不
0

你有另一個標頭的地方,也有#define MAIN_HEADER

這是一個容易犯的錯誤,通過複製一箇舊的創建一個新的標題,並導致這樣的神祕症狀。