Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象用作类的构造函数参数时出错 我们在课程的最后2周学习C++,在2天内学习最后的内容:所以我是初学者。我熟悉C_C++_Constructor_Pure Virtual - Fatal编程技术网

将对象用作类的构造函数参数时出错 我们在课程的最后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 &copy)
// 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;
};