简短的问题是:如何使用 Visual Studio 创建/编译/运行在不同目录中具有源代码的项目。
以下是具体细节:
我在一个目录中有一个类定义文件 (.hpp) 和实现文件 (.cpp),在另一个目录中有一个 main.cpp 文件。在 Visual Studio 2008 中,我创建了一个新项目并将 main.cpp 放入该项目中。我将类文件目录添加到附加包含目录中(右键单击项目 -> 项目属性 -> 配置属性 - C/C++ - 常规 -> 附加包含目录 = C:\Test\cpp)。
当我这样做时,智能感知在编辑 main.cpp 时工作正常。当我构建项目时,它编译得很好,但我得到了链接错误,例如:
错误 LNK2019:函数 _main 中引用的未解析的外部符号“public:int __thiscall Test::add(int)”(?add@Test@@QAEHH@Z)。
据我所知,Visual Studio 实际上并没有编译 Test.cpp(我没有看到任何为它制作的 .obj 文件)。在编译/构建 main.cpp 之前,我曾尝试将其分开编译,但这没有任何区别。有没有解决的办法?当我在网上搜索答案时,我看到很多人忘记包含链接器的库,但我没有处理任何库。
我还通过将 Test.hpp 和 Test.cpp 移动到与 main.cpp 相同的目录来验证此代码可以正确编译和运行 - 没有任何问题。我会坚持这种设置,但我需要能够为我正在处理的项目使用来自不同目录的源代码。
这是3个文件:
C:\Test\cpp\Test.hpp
#ifndef TEST_H #define TEST_H class Test { private: int mynum; public: Test(); int add(int num); }; #endif //TEST_H
C:\Test\cpp\Test.cpp
#include "Test.hpp" Test::Test() { mynum = 0; } int Test::add(int num) { return mynum += num; }
C:\Visual Studio 项目\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; }