【问题标题】:C++: undefined reference to ConstructorC ++:对构造函数的未定义引用
【发布时间】:2021-01-06 04:46:33
【问题描述】:

我刚开始使用 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

【问题讨论】:

  • 嗯,代码看起来不错,你是怎么编译的?
  • 工作正常。 cpp.sh/6zrl6

标签: c++


【解决方案1】:

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

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

g++ Rectangle.cpp

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

【讨论】:

  • 你不是说g++ Main.cpp Rectangle.cpp吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多