我有一个包含 2 个项目的可视化C++解决方案:矩形和项目3。
在矩形项目中,我有 rect.cpp 和 rect.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。
如果您需要更详细的使用包含说明,我已经写了其中的很大一部分,所以不要犹豫。