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

Creating class object defined in another project

本文关键字:对象 定义 另一个 项目 创建      更新时间:2023-10-16

我有一个包含 2 个项目的可视化C++解决方案:矩形项目3

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

矩形.h

#ifndef rect_h
#define rect_h
class Rect
{
public:
    Rect();
    int m_h;
    int m_w;
};
#endif //rect_h

矩形.cpp

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

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

但是当我尝试从 project3 中执行相同的操作时,它会产生链接器错误。

LNK2019:未解析的外部符号"公共:__thiscall Rect::Rect(void(" (??0Rect@@QAE@XZ( 在函数 _main 中引用 1>C:\Users\mbaro\documents\visual studio 2017\项目\项目2\调试\项目3.exe:致命错误LNK1120:1 未解析的外部

主.cpp(在项目 3 中(

#include "rect.h"
using namespace std;
int main()
{
    Rect* a = new Rect();
    return 0;
}

我有点觉得类定义被成功拾取了,但是链接器无法从rect.cpp链接构造函数代码。

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

谢谢。

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

它可能取决于确切的 VS 版本,但在项目/属性中,您应该找到链接器/输入和其他依赖项。如果您只需要另一个项目中的一个或两个目标文件 ( xxx.obj (,请在此处添加它们。这样,您可以避免代码重复,这将是未来维护的噩梦......

如果有许多通用文件,则应考虑将它们放在辅助项目中,该项目将在同一解决方案中构建(静态(库,然后在两个项目中链接该库(当然,还可以为使用该库的其他项目提供对库项目的头文件的访问权限(。

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

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

Person(int h, int w);

声明将需要什么,而不是你已经拥有的东西。如果您希望这些是您所编写的特定内容,则构造函数应该是:

Person();

在 .h 中

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

在.cpp。

如果您需要更详细的使用包含说明,我已经写了其中的很大一部分,所以不要犹豫。