繁体   English   中英

将一个类中的对象用作另一个类的对象C ++

[英]Using an object from a class as an object for another class c++

我正在编写C ++程序,并且必须使用一个类的实例作为另一个类的私有成员。 我需要用作成员实例的类的代码如下:

class Triangle
{
    public:
        Triangle(int _height, int _base){ set(_height, _base); } 
        //constructor
        void set(int _height, int _base){ height = _height; base = _base; }
        int area(){ return ((height*base)/2); }
        int perimeter(){ return (2*(sqrt(((base/2)*(base/2)) +. (height*height))) + base); }
    private:
        int height; 
        int base; 
 };

这是将上述实例用作私有成员的类的定义:

Class Penta
{
    Public:
        Penta(int b );
        Penta(){ TriPart.set(10, 10); }
    Private:
        Triangle TriPart;
};

当我编译上面的代码时,编译失败并显示以下错误:

error: no matching function for call to 'Triangle::Triangle()'

如果您能帮助我,我非常感谢。

代码中有几个问题。 但这很容易解决。

如果您要编译代码,那么编译器将已经告诉您了,出了什么问题。

因此,在代码的第一部分中,周长的计算中有一个“”。 在“ +”之后。 另外,您要小心。 您正在计算中创建双精度值,然后以整数形式返回。 那不管用。

在第二个定义中,“类”,“公共”和“私人”一词大写。 您需要使用正确的关键字。 您的Penta(int b)构造函数没有正文。 而且该类也没有数据成员,您可以在其中分配它,

然后,如编译器所报告的那样,您的Triangle类没有默认构造函数,例如Triangle(){} Penta的默认构造函数需要调用Triangle的某些构造函数,但是没有。

有几种可能的解决方案:

  • 向类Triangle Triangle(){}添加默认构造函数
  • 修改Penta类的默认构造函数为: Penta() : TriPart(10,10) {}

我还建议初始化所有变量,例如

int height{ 0 };
int base{ 0 };

最后但并非最不重要的一点是,我建议读一本关于类及其构造函数的不错的C ++书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM