将对象用作类的构造函数参数时出错 我们在课程的最后2周学习C++,在2天内学习最后的内容:所以我是初学者。我熟悉C
以下是作业的相关部分:将对象用作类的构造函数参数时出错 我们在课程的最后2周学习C++,在2天内学习最后的内容:所以我是初学者。我熟悉C,c++,constructor,pure-virtual,C++,Constructor,Pure Virtual,以下是作业的相关部分: Part 1 [20 points] Reading material: Copy constructor: https://www.geeksforgeeks.org/copy-constructor-in-cpp/ References (the & symbol): https://www.geeksforgeeks.org/references-in-c/ --------------------------------------------------
Part 1 [20 points]
Reading material:
Copy constructor: https://www.geeksforgeeks.org/copy-constructor-in-cpp/
References (the & symbol): https://www.geeksforgeeks.org/references-in-c/
------------------------------------------------------------------------------------------------------
Write a class Point representing a point in 2d.
The class will have the following public methods:
// constructor - sets the coordinates to be x,y
Point( int x, int y)
// copy constructor - creates a new point with the same
coordinates
Point(Point ©)
// getters
int getX()
int getY()
// setters
void setX()
void setY()
// prints to screen the coordinates in the format (x,y)
void print()
我的执行:
GeometricShape.hpp
#include <iostream>
#include "Point.hpp"
using namespace std;
class GeometricShape {
private:
Point point;
public:
// Parameterized Constructor
GeometricShape(Point coord);
virtual float getArea();
virtual float getPerimeter();
virtual void print();
};
Point.hpp
#include <iostream>
using namespace std;
class Point {
private:
int x, y;
public:
// Parameterized Constructor
Point(int x1, int y1);
~Point();
Point (const Point &p2);
int getX();
int getY();
void setX(int x2);
void setY(int y2);
void print();
};
我的执行:
GeometricShape.hpp
#include <iostream>
#include "Point.hpp"
using namespace std;
class GeometricShape {
private:
Point point;
public:
// Parameterized Constructor
GeometricShape(Point coord);
virtual float getArea();
virtual float getPerimeter();
virtual void print();
};
额外信息
我也尝试过这个实现,但我认为我可能想得太多了。如果它有助于理解我的困惑,那么您可以查看它。纯虚函数的“=0
”语法只允许在类定义中使用,而不允许在类外的函数定义中使用
对于除析构函数以外的纯虚拟函数,函数的实际定义是可选的,因此您可能根本不需要在源文件中定义GeometricShape::print()
。纯虚拟函数的“=0
”语法只允许在类定义中使用,不在类外函数的定义处
对于除析构函数以外的纯虚拟函数,函数的实际定义是可选的,因此您可能根本不需要在源文件中定义
GeometricShape::print()
。似乎缺少类点的默认构造函数。在GeometricShape构造函数中:GeometricShape::GeometricShape(点坐标)
,coord
应该由默认构造函数初始化 您似乎缺少类点的默认构造函数。在GeometricShape构造函数中:GeometricShape::GeometricShape(点坐标)
,coord
应该由默认构造函数初始化 在接受了上述所有帮助后,再问一个问题,并咨询我的教授:
它应该按如下方式执行,并且工作正常
#include <iostream>
#include "Point.hpp"
using namespace std;
class GeometricShape {
private:
Point point;
float area;
float perimeter;
public:
// Parameterized Constructor
GeometricShape(Point coord) : point(coord.getX(), coord.getY()) // initialize the data field
{
area = 0;
perimeter = 0;
}
virtual float getArea();
virtual float getPerimeter();
virtual void print() = 0;
};
#包括
#包括“Point.hpp”
使用名称空间std;
类几何图形{
私人:
点-点;
漂浮区;
浮动周长;
公众:
//参数化构造函数
GeometricShape(Point-coord):Point(coord.getX(),coord.getY())//初始化数据字段
{
面积=0;
周长=0;
}
虚拟浮点getArea();
虚拟浮点getPermiture();
虚空打印()=0;
};
注意,因为它是一个抽象类,所以作为初学者,我发现将其全部制作为一个文件而不是将其拆分为hpp和cpp文件比较容易混淆。在接受了上述所有帮助后,我提出了另一个问题,并咨询了我的教授:
它应该按如下方式执行,并且工作正常
#include <iostream>
#include "Point.hpp"
using namespace std;
class GeometricShape {
private:
Point point;
float area;
float perimeter;
public:
// Parameterized Constructor
GeometricShape(Point coord) : point(coord.getX(), coord.getY()) // initialize the data field
{
area = 0;
perimeter = 0;
}
virtual float getArea();
virtual float getPerimeter();
virtual void print() = 0;
};
#包括
#包括“Point.hpp”
使用名称空间std;
类几何图形{
私人:
点-点;
漂浮区;
浮动周长;
公众:
//参数化构造函数
GeometricShape(Point-coord):Point(coord.getX(),coord.getY())//初始化数据字段
{
面积=0;
周长=0;
}
虚拟浮点getArea();
虚拟浮点getPermiture();
虚空打印()=0;
};
注意,因为它是一个抽象类,我发现作为一个初学者,将其全部制作为一个文件而不是将其拆分为hpp和cpp文件比较容易混淆。从第一批错误消息中,您没有点的默认构造函数,您的类名中有一个输入错误,这不是您声明纯虚函数的方式。谢谢您的输入。my Point.cpp中定义构造函数的“Point::Point(intx1,inty1)”是否错误?哪个类名的输入错误?声明虚纯函数有什么不对呢?您定义了一个接受2个参数但不是默认构造函数的构造函数(Point::Point()
)。函数定义中的类名称。纯虚拟在类声明中出现,如“我被卡住了”部分末尾所列:virtualvoidprint()=0代码>谢谢!我会做所有这些事情。啊好的。所以我甚至不应该在Geometricshape.cpp中有任何东西,除了构造函数?从第一批错误消息中,您没有点
的默认构造函数,您的类名中有一个拼写错误,这不是您声明纯虚函数的方式。谢谢您的输入。my Point.cpp中定义构造函数的“Point::Point(intx1,inty1)”是否错误?哪个类名的输入错误?声明虚纯函数有什么不对呢?您定义了一个接受2个参数但不是默认构造函数的构造函数(Point::Point()
)。函数定义中的类名称。纯虚拟在类声明中出现,如“我被卡住了”部分末尾所列:virtualvoidprint()=0代码>谢谢!我会做所有这些事情。啊好的。所以我甚至不应该在Geometricshape.cpp中有任何东西,除了构造函数?谢谢!但是你知道为什么我会得到一个错误,说我没有一个constructor作为点吗?我这样做只是因为教授似乎需要一个.hpp和.cpp文件。我的声明或定义还有什么问题吗?谢谢!但是你知道为什么我会得到一个错误,说我没有一个constructor作为点吗?我这样做只是因为教授似乎需要一个.hpp和.cpp文件。我的声明或定义还有其他错误吗?除非有人反对,否则我将接受这一正确答案。除非有人反对,否则我将接受这一正确答案
gsg27@csil-cpu5:~/sfuhome/cmpt-125/5$ g++ GeometricShape.cpp
GeometricShape.cpp: In constructor ‘GeometricShape::GeometricShape(Point)’:
GeometricShape.cpp:5:43: error: no matching function for call to ‘Point::Point()’
GeometricShape::GeometricShape(Point coord)
^
In file included from GeometricShape.hpp:2:0,
from GeometricShape.cpp:2:
Point.hpp:15:5: note: candidate: Point::Point(const Point&)
Point (const Point &p2);
^~~~~
Point.hpp:15:5: note: candidate expects 1 argument, 0 provided
Point.hpp:11:5: note: candidate: Point::Point(int, int)
Point(int x1, int y1);
^~~~~
Point.hpp:11:5: note: candidate expects 2 arguments, 0 provided
GeometricShape.cpp: At global scope:
GeometricShape.cpp:16:7: error: ‘GeometircShape’ has not been declared
float GeometircShape::getPerimeter()
^~~~~~~~~~~~~~
GeometricShape.cpp:21:32: error: function ‘virtual void GeometricShape::print()’ is initialized like a variable
void GeometricShape::print() = 0;
^
#include <iostream>
#include "Point.hpp"
using namespace std;
class GeometricShape {
private:
Point point;
float area;
float perimeter;
public:
// Parameterized Constructor
GeometricShape(Point coord) : point(coord.getX(), coord.getY()) // initialize the data field
{
area = 0;
perimeter = 0;
}
virtual float getArea();
virtual float getPerimeter();
virtual void print() = 0;
};