2012-05-11 41 views
1

我使用了詞層次結構,但我不確定它是否是正確的!讓我解釋。gcc不尊重包含文件的層次結構

我有啊有:

#include <iostream> 
#include <vector> 
using namespace std; 

我了Bh有:

typedef vector<int> int_vector; 
int_vector my_function(int x, int y); 

最後我有XH,那就是:

#include "A.h" 
#include "B.h" 

而且X.cpp:

#include "X.h" 

// and the rest 

但是當我用GCC編譯它時,它在B.h中表示,vector未定義等等。請注意,這是一個解釋問題的例子。我試圖在Linux上編譯的項目在Visual Studio下完全在Windows上編譯。

我可以改變文件,但它是一個300 +文件項目,所以任何幫助或建議,將非常高效?

回答

0

您發佈的代碼沒有問題,並且gcc中似乎不太可能存在這種性質的錯誤。

更可能的問題不是它看起來。例如,您的項目中可能有多個A.h(或B.hX.h)文件,並且某處包含錯誤的文件。

我的建議是通過預處理器(gcc -E)運行一個有問題的.cpp文件並檢查結果。那會準確地告訴你什麼時候被包括在內。

+0

錯誤是愚蠢的。在一些#if #else #endif部分中,一組代碼正在關閉一個名稱空間的括號......這會導致所有事情都發生!通常情況下,它會假設編譯。我之前使用過這種方法。 OpenGL(至少有一個版本)很常見, – widgg