![](/img/trans.png)
[英]Visual Studio 2010 - C++ Compile time IntelliSense errors
[英]Visual Studio C++ able to compile with compile errors (red underlines)
我遇到了編譯錯誤(紅色下划線)的問題,如:
Error: cannot open source file "stdafx.h"
這里是一個編輯過的環境截圖:
在左側是我的Visual Studio解決方案目錄列表,關閉“顯示所有文件”。
我正在研究一個學校項目,每個文件夾都是項目不同部分的源文件,由不同的人負責。
例如,學生A和B都是AST和PARSER文件夾(我們稱之為子項目)。 我們為每個子項目都有一個API,以便其他子項目知道要調用什么。
在TOP-CENTER,我們有一個QueryProcessor
類的源文件。 (只是前幾行)在它下面,是Build Success
的輸出。
紅線遍布所有類,主要是因為#include "stdafx.h"
無法被環境打開。
在右邊,這是stdafx.h
,我們包含所有不同的子項目,所以我們省去了每個項目有不同stdafx.h的麻煩
但是,我能夠構建項目。 我很確定我正在做這個目錄/鏈接錯誤。
這應該工作
在VC中組合文件夾和虛擬文件夾是我的觀點,因為虛擬文件夾指示所有文件都在一個目錄中,並且在硬盤驅動器上創建的文件夾顯然表明所有文件都在不同的目錄中。 如果你知道發生了什么,你可以把它結合起來但在你的情況下我不推薦它。
我假設您錯過了解stdafx.h的目的。此頭文件的目的不是將所有標題文件放入其中,然后將其包含在所有其他文件中。 這是關於stdafx.h的這個目的的一個問題
清理stdafx.h文件后,在.cpp文件中包含盡可能多的頭文件,如果頭文件中需要這些文件,則只將這些包含在頭文件中
打開顯示所有文件,現在您將使用實際文件夾,並且您可以確定如果您在“PKB”之類的文件夾中找到該文件夾確實存在,因為您可以在左側解決方案資源管理器中看到它。
如果使用namespace std; 例如,確保您還包含所需的頭文件。 您可能會認為“嘿,我已經將iostream包含在另一個頭文件中,我現在將其包含在此頭文件中,因此我不需要它”當您使用更大的項目時,這將真正摧毀您。
哦,關於stdafx.h包含問題,只要你切換到顯示所有文件我假設你會發現stdafx與你使用include的文件不同。 也許需要#include "..\\stdafx.h"
類的東西(取決於你的結構)。
我認為這是顯而易見的,但是如果你包含一個頭文件,那么include就是相對於包含另一個頭文件的文件。
stdafx.h
通常用於創建預編譯頭,它實質上是編譯時優化,因此編譯器不會為每個編譯單元連續編譯這些頭。
如果這些標頭中的任何標頭發生更改,則需要執行完整的系統重建。
實際上,最好只使用它來包含標准標題和第三方標題(如boost庫和類似標題),這些標題你永遠不會改變。
您可能會認為您自己的某些庫是“一成不變的”,也可以包含在內。
每個項目,即構建到單獨單元(DLL或.exe)中的項目的每個部分都應該有自己的預編譯頭和它自己的stdafx.h版本
項目只應包含自己的.stdafx而不包含其他項目的項目,因此此頭文件也可用於定義dllexport宏。
在安排項目標題時,您應該注意:1。外部包含哪些標題2.哪些標題僅包含在內部,甚至不包含在外部。
后一種類型應該包括您的stdafx.h文件,理想情況下不應該與項目外部包含的那些頭文件位於同一目錄中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.