簡短的問題是:如何使用Visual Studio創建/編譯/運行在不同目錄中具有源代碼的項目。包含來自其他目錄的標題時的Visual Studio鏈接錯誤
下面是具體的細節:
我有一個目錄中的類定義文件(.HPP)和實現文件(的.cpp),我有別的目錄下的main.cpp文件。在Visual Studio 2008中,我創建了一個新項目並將main.cpp放入該項目中。我將類文件目錄添加到其他包含目錄(右鍵單擊項目 - >項目屬性 - >配置屬性 - C/C++ - 常規 - >其他包含目錄= C:\ Test \ cpp)。
當我這樣做時,intellisense在編輯main.cpp時工作正常。當我生成項目,它編譯罰款,但我得到的鏈接錯誤,如:
錯誤LNK2019:無法解析的外部符號「公用:整數__thiscall測試::添加(INT)」(添加測試@ @@? QAEHH @ Z)在函數_main中引用。
據我所知,Visual Studio實際上並沒有編譯Test.cpp(我沒有看到它的任何.obj文件)。在編譯/構建main.cpp之前,我已經嘗試編譯它,但這並沒有什麼區別。有沒有解決的辦法?當我在網上搜索答案時,我發現很多人忘記爲鏈接器添加庫,但我沒有處理任何庫。
我也通過將Test.hpp和Test.cpp移動到與main.cpp相同的目錄來驗證此代碼編譯和運行正常 - 工作沒有任何問題。我只會堅持使用該設置,但我需要能夠使用來自不同目錄的源代碼來處理我正在處理的項目。
這裏有3個文件:
C:\測試\ CPP \ Test.hpp
#ifndef TEST_H #define TEST_H class Test { private: int mynum; public: Test(); int add(int num); }; #endif //TEST_H
C:\測試\ CPP \ Test.cpp的
#include "Test.hpp" Test::Test() { mynum = 0; } int Test::add(int num) { return mynum += num; }
C:\ Visual Studio Projects \ MyProject \ main.cpp
#include <iostream> #include <Test\Test\Test.hpp> int main(int argc, char *argv[]) { Test test; std::cout << "Add 5 = " << test.add(5) << std::endl; return 0; }
正如我所說 - 我可以添加Test.hpp和Test.cpp到這個簡單的項目,但我有其他不那麼簡單的項目需要單獨的目錄。例如,我將在本地機器上創建使用存儲在服務器/中央源代碼控制存儲庫中的代碼的項目。 – 2012-04-12 17:10:26
你也說'我不處理任何圖書館'。如果您想跨多個項目重新使用代碼,請按照dpiskyulev的建議將通用代碼編譯爲.dll或庫。 – 2012-04-12 18:30:04
沒有什麼可以阻止你從多個目錄導入到單個項目,如果這就是你的意思'我會堅持使用該設置,但我需要能夠使用不同目錄中的源代碼來處理我正在處理的項目' 。當您在項目設置中輸入目錄時,只需在目錄之間貼上';'。 – 2012-04-12 18:32:11