c++ - 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
解决方案
该错误是由链接器生成的,因为它看不到构造函数的定义所在的位置。
如果您使用的是 IDE,则应将 .cpp 文件添加到项目中,以便可以对其进行编译,并且链接器可以找到定义。不是,那么你必须自己编译它——假设你使用的是 gcc:
g++ Rectangle.cpp
会将 cpp 文件合并到一个可执行文件中,并且不应该向您显示该错误。访问这篇文章
推荐阅读
- php - AJAX GET 在具有更大数组大小的 Godaddy 上显示空结果
- amazon-web-services - Windows 身份验证在 AWS Application Load Balancer 后面不起作用
- java - Java Logger (java.util.logging.logger) 不替换变量
- c# - 使用 Swashbuckle 的 .NET Core 中每个版本每个区域的 OpenAPI 定义文件
- reactjs - React+Redux 自定义 Hook(仅在特定条件下更新)
- mybatis - mybatis + springboot 2.3.0 - 无法解决类型别名问题
- php - 我怎样才能拥有一个所有模型都可以在 Codeigniter 中访问的变量?
- python - 如何更优雅地编写这个产品功能?
- javascript - iframe HTML,有助于根据悬停动态更改 URL
- email - Vesta / Cloudflare DNS / 无法使用 Outlook 客户端连接到邮件服务器