C++:对构造函数的未定义引用

时间:2021-01-06 04:46:33

标签: c++

我刚刚开始使用 C++,并且正在做一个处理多态指针的练习。我在尝试解决错误消息时遇到了麻烦,我相信我是从 Rectangle.cpp 收到的,因为我从 main.cpp 调用类。

错误信息:

<块引用>

未定义引用'Rectangle::Rectangle(double, double)'

Main.cpp

#include <iostream>
#include "Rectangle.h"
using namespace std;

//////////////////////////////////////////////
//       --- FUNCTIONS DECLARATION---
void introduceShape(Shape*);
double calculateShapeArea(Shape*);
double calculateShapeCircumferece(Shape*);


int main()
{
    Rectangle rectangle1(5,2);
 //   Rectangle *rec1 = new Rectangle(5,2);

    introduceShape(&rectangle1);
    cout << "My area is: " << calculateShapeArea(&rectangle1) << ", my circumference is: " << calculateShapeCircumferece(&rectangle1) << endl << endl;


    return 0;
}

//////////////////////////////////////////////
//         --- FUNCTIONS ---
void introduceShape(Shape* shapeToIntroduce)
{
    return shapeToIntroduce->introduce();
}

double calculateShapeArea(Shape* shapeToCalculate)
{
    return shapeToCalculate->calculateArea();
}

double calculateShapeCircumferece(Shape* shapeToCalculate)
{
    return shapeToCalculate->calculateCircumference();
}

矩形.h

#ifndef RECTANGLE_H_INCLUDED
#define RECTANGLE_H_INCLUDED
#include "Shape.h"
#include <iostream>

using namespace std;

class Rectangle: public Shape
{
    double width;
    double height;
public:
    Rectangle(double , double );
    void introduce();
    double calculateArea();
    double calculateCircumference();

};

#endif // RECTANGLE_H_INCLUDED

矩形.cpp

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

using namespace std;

Rectangle::Rectangle(double width, double height)
{
    this->width = width;
    this->height = height;
}
void Rectangle::introduce()
{
    cout << "I AM A RECTANGLE !" << endl;
}
double Rectangle::calculateArea()
{
    return width*height;
}
double Rectangle::calculateCircumference()
{
    return 2*(width+height);
}

形状.h

#ifndef SHAPE_H_INCLUDED
#define SHAPE_H_INCLUDED

class Shape
{
    public:
        virtual void introduce() = 0;
        virtual double calculateArea() = 0;
        virtual double calculateCircumference() = 0;
};

#endif // SHAPE_H_INCLUDED

1 个答案:

答案 0 :(得分:1)

错误是由链接器产生的,因为它看不到构造函数的定义所在。

如果您使用的是 IDE,则应将 .cpp 文件添加到项目中,以便可以对其进行编译并且链接器可以找到定义。不是,那么你必须自己编译它——假设你正在使用 gcc:

g++ Rectangle.cpp

会将 cpp 文件合并为一个可执行文件,并且不应向您显示该错误。 访问this post