2012-10-16 70 views
1

我有一個在Linux中沒有問題的應用程序,現在我試圖對Windows編譯它,我創建了一個專門用於編譯它的.pro文件視窗。Qt中的非類方法(帶有qtcreator)無法解析的外部符號

我使用了一個僞類(只是一個帶有buch方法的命名空間,但沒有一個class語句,所以我可以在不創建對象的情況下使用它)在Linux中工作得很好,但是當我嘗試編譯時,使用了 windows在我使用這個僞類的所有代碼中,我得到了'未解析的外部符號'。

僞類是這樣的:

namespace foo { 
    bool method_bar(); 
} 

然後我用這樣的:

foo:method_bar(); 

漂亮的直線前進,有點像靜態方法。

在有人問我之前,爲什麼不首先使用靜態方法;我有一些特殊的情況,我不能像靜態一樣使用這些方法。這就是爲什麼我直接在命名空間下創建方法的原因。

所以,在我的.pro文件,我從我的僞類添加的.h和.cpp文件是這樣的:

HEADERS += \ 
     .... 
     include/foo.h 
     .... 


    SOURCES += \ 
     .... 
     include/foo.cpp 
     ---- 

雖然它包含在我的項目中的文件,它拋出的是LNK2019:無法解析的外部符號錯誤。

我不是初學者,但是我是Qt的初學者。

任何幫助將深表謝意。

ps:原諒我的英文錯誤。

+0

你有'與其他目標文件一起foo.obj'?它是否包含'bool foo :: method_bar()'的符號?用DUMPBIN檢查。 –

+0

我沒有foo.obj。只需要直接使用foo :: method_bar()。 –

+0

如果你在'foo.h'中的聲明'bool method_bar();'實際上在'foo.cpp'中有一些實現主體(它沒有一個主體是沒有用的,對嗎?),那麼你當然需要'foo .obj',這個主體被編譯。你「消耗頭文件」很好,但是編譯器需要body。這就是LNK2019的含義。 –

回答

0

首先,範圍運算符是foo「::」method_bar();

看得出來,這樣在任何你正在調用這個函數的地方知道的功能

有在QT使用的命名空間沒有問題的聲明的頭功能的使用之前包括在內。

還有一個建議是

using namespace foo;

看完整的代碼將真正幫助我解決這個問題

+0

對不起,我花了很長時間纔回來,我完全忘了這篇文章。我忘了添加'using namespace foo',這是造成麻煩的原因。 –