正在创建另一个项目中定义的 class 个对象

Creating class object defined in another project

我有一个包含 2 个项目的 Visual C++ 解决方案:rectangleproject3.

在矩形项目中我有 rect.cpprect.h.

rect.h

#ifndef rect_h
#define rect_h
class Rect
{
public:
    Rect();

    int m_h;
    int m_w;
};
#endif //rect_h

rect.cpp

#include "rect.h"
Rect::Rect()
{
    m_h = 1;
    m_w = 5;
}

每当我尝试从矩形项目创建矩形对象时,它都会成功。

但是当我尝试从 project3 执行相同操作时,它会产生 linker 错误。

LNK2019: unresolved external symbol "public: __thiscall Rect::Rect(void)" (??0Rect@@QAE@XZ) referenced in function _main 1>C:\Users\mbaro\documents\visual studio 2017\Projects\Project2\Debug\Project3.exe : fatal error LNK1120: 1 unresolved externals

main.cpp(在项目 3 中)

#include "rect.h"
using namespace std;

int main()
{
    Rect* a = new Rect();

    return 0;
}

我觉得 class 定义被成功获取,但是 linker 不能 link 来自 rect.cpp.[=15= 的构造函数代码]

问题是什么以及如何解决?

谢谢。

我已经开始写很长很长的答案了。然后我意识到,你可能遗漏的是,尽管你的 class 被命名为 "Person",但你应该添加的头文件被命名为 "rect.h".

此外,您的构造函数不能在头文件中声明值(编辑:不正确,我弄错了)。在头文件中,尝试使用:

Person(int h, int w);

您声明需要什么,而不是您已经拥有的。如果您希望这些具体是您编写的构造函数应该是:

Person();

在.h

Person::Person()
{
m_h = 1;
m_w = 5;
}

.cpp.

如果您需要更详细的使用 include 的说明,我已经写了大部分内容,请不要犹豫。

错误是正常的:您告诉编译器在哪里可以找到 .h 文件,但是您没有告诉 linker 它可以在哪里找到 .obj 文件。

它可能取决于确切的 VS 版本,但在 Project/Properties 中,您应该找到 Linker/Input 并且有其他依赖项。如果您只需要来自其他项目的一个或两个目标文件 (xxx.obj),请在此处添加它们。这样,您就可以避免代码重复,这将是未来维护的噩梦...

如果您有许多公用文件,您应该考虑将它们放在一个辅助项目中,该项目将在同一解决方案中构建一个(静态)库,然后 link 两个项目(和当然可以为使用该库的其他项目访问该库项目的头文件。