LNK2019在这种情况下如何解决?一切似乎都是正确的

时间:2017-08-10 16:02:40

标签: c++ oop linker-errors

我有一个常见的LNK2019错误,无法弄清楚出了什么问题。

这是我的解决方案资源管理器:

enter image description here

这是我的Rectangle.cpp

class Rectangle
{
    public:
        int getArea()
        {
            return this->width*this->height;
        }
        int width;
        int height;
};

这是我的Rectangle.h

#pragma once
class Rectangle
{
    public:
        int getArea();
        int width;
        int height;
};

这是我的Functions.cpp

#include <iostream>
#include "Rectangle.h";

using namespace std;

int main()
{
    Rectangle r3{ 2, 3 };
    cout << r3.getArea();

    return 0;
}

我是C ++的新手,似乎我做的一切都正确,但我仍然遇到错误。

2 个答案:

答案 0 :(得分:2)

当你想编写类函数的主体时,你需要这样写:

#include "Rectangle.h"
int Rectangle::getArea()
{
    return this->width*this->height;
}

您无需将类重新定义为cpp文件。 您可以在标题(.h,.hpp)中定义所有内容,将其包含在cpp文件(#include "Rectangle.h")中,但不得重新声明头文件中的所有内容。

顺便说一下,由于您正在编写方法,因此可以width直接访问成员变量,而无需使用this->width

但是,我建议您在编写自己的类时使用约定。 我的约定是用m作为成员变量的前缀。 (在您的情况下,它会为您提供mWidthmHeight)。

还有其他人拥有其他约定,例如m_variablevariable_

答案 1 :(得分:2)

Rectangle.cpp应该是这样的:

#include "Rectangle.h"

int Rectangle::getArea() {
  return this->width*this->height;
}

你不应该在源文件中重新定义类定义,因为你已经在头文件中有了它!