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

时间:2017-03-17 14:30:27

标签: c++ class constructor solution

我有一个包含2个项目的Visual C ++解决方案:矩形 project3

在矩形项目中,我有 rect.cpp rect.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;
}

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

但是当我尝试从project3做同样的事情时,会产生链接器错误。

  

LNK2019:未解析的外部符号“public:__ thishisall   函数_main中引用了Rect :: Rect(void)“(?? 0Rect @@ QAE @ XZ)   1> C:\ Users \ mbaro \ documents \ visual studio   2017 \ Projects \ Project2 \ Debug \ Project3.exe:致命错误LNK1120:1   未解决的外部因素

main.cpp(在项目3中)

#include "rect.h"
using namespace std;

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

    return 0;
}

我觉得类定义已成功获取,但链接器无法链接rect.cpp的构造函数代码。

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

它可能取决于确切的VS版本,但在Project / Properties中,您应该找到Linker / Input以及其他依赖项。如果您只需要另一个项目中的一个或两个目标文件(<?Php $degrees = -90; //change this to be whatever degree of rotation you want header('Content-type: image/jpeg'); $filename = 'uploads/101822973264163759893-1428320267361.jpeg'; //this is the original file $source = imagecreatefromjpeg($filename) or notfound(); $rotate = imagerotate($source,$degrees,0); imagejpeg($rotate,$filename); //save the new image imagedestroy($source); //free up the memory imagedestroy($rotate); //free up the memory ?> ),请在此处添加它们。这样,您就可以避免代码重复,这将是未来维护的噩梦......

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

答案 1 :(得分:-2)

我已经开始写一个长而长的答案了。然后我意识到,尽管你的课程被命名为“#34; Person&#34;你应该添加的头文件名为&#34; rect.h&#34;。

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

Person(int h, int w);

你宣布需要什么,而不是你已经拥有的东西。如果你想要那些特别是你写的构造函数应该是:

Person();

in .h

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

in .cpp。

如果你需要更详细的使用include的描述,我已经写了很多部分,所以不要犹豫。