2015-11-08 140 views
1

为什么下面的代码C++构造继承错误

#include <iostream> 
using namespace std; 

class Polygon { 
    protected: 
    int width, height; 
    Polygon() 
    { 
      cout<<"Constructor with no arguments\n"; 
      width = 0; 
      height = 0; 
    } 
    Polygon(int width,int height) 
    { 
       cout<<"Constructor with 2 arguments\n"; 
       this->width = width; 
       this->height = height; 
    } 
}; 

class Rectangle: public Polygon { 
    public: 
     Rectangle(int width,int height):Polygon(width,height){} 
    int area() 
     { return width * height; } 
}; 

class Triangle: public Polygon { 
    public: 
     Trianlge(int width,int height): Polygon(width,height){} 
    int area() 
     { return width * height/2; } 
    }; 

int main() { 
    //Rectangle rect(4,4); 
    //Triangle trgl(4,4); 
    return 0; 
} 

导致这些错误:

test.cpp:34:39: error: ISO C++ forbids declaration of ‘Trianlge’ with no type [-fpermissive] 
      Trianlge(int width,int height): Polygon(width,height){} 
            ^
test.cpp: In member function ‘int Triangle::Trianlge(int, int)’: 
test.cpp:34:42: error: only constructors take member initializers 
      Trianlge(int width,int height): Polygon(width,height){} 
             ^
test.cpp:34:64: warning: no return statement in function returning non-void [-Wreturn-type] 
      Trianlge(int width,int height): Polygon(width,height){} 

它与构造函数的继承问题。每次创建矩形或三角形时,我都想调用Polygon的构造函数。但是,我发现类RectangleTriangle非常相似,我只在Triangle上出错,而​​在Rectangle上出错。您能否向我解释错误的原因以及如何解决?

+1

拼字/错字也许是:'Trianlge'与'Triangle'? –

+0

你拼错'三角形'。 –

+0

...并使用初始化列表 –

回答

1

您在这里有一个错字你Triangle类中

Trianlge(int width,int height): Polygon(width,height){} 
^
^