首页 > 解决方案 > C ++:对构造函数的未定义引用

问题描述

我刚开始使用 C++,并且正在做一个处理多态指针的练习。当我Rectangle.cpp从我的main.cpp.

错误信息:

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

主文件

#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

标签: c++

解决方案


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

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

g++ Rectangle.cpp

会将 cpp 文件合并到一个可执行文件中,并且不应该向您显示该错误。访问这篇文章


推荐阅读