1

嗨,我正在编写简单的类,然后是 web 中的示例代码。此代码工作正常,没有错误。

class Shape{
      protected:
              int width,height;

      public:
             Shape(int a = 0, int b=0)
             {
             width = a;
             height = b;         
                       }

};
class regSquare: public Shape{
      public:
             regSquare( int a=0, int b=0)
             {
              Shape(a, b);
             }    
};

但是当我将我的构造函数更改为只有一个参数时,例如

class Shape{
      protected:
              int width;
      public:
             Shape(int a = 0)
             {
             width = a;

                       }

};
class regSquare: public Shape{
      public:
             regSquare(int a = 0)
             {
              Shape(a);
             }    
};

此按摩发生错误

'错误:'a'的声明遮蔽了参数'

我不知道我的代码有什么问题

4

2 回答 2

7

不过,很可能这两个版本都不符合您的要求!编码

regSquare(int a = 0, int b = 0) {
    Shape(a, b);
}

不初始化对象子对象!相反,它使用参数创建一个临时类型的对象和。一个参数版本做了类似的事情:ShaperegSquareShapeab

Shape(a);

Shape定义了一个名为的默认构造对象a。您可能打算使用初始化列表将构造函数参数传递给Shape子对象,例如:

reqSquare(int a = 0, int b = 0)
    : Shape(a, b) {
}

或者

regSquare(int a = 0)
   : Shape(a) {
}
于 2013-08-21T01:34:19.440 回答
0

因为在单一争论中,编译器将其作为对象名称并创建一个对象,因此它会产生冲突。

于 2020-12-12T19:20:50.003 回答