2017-06-07 18 views
0

私はタイプの長方形のオブジェクトを宣言しようとしているが、それは、これは形状クラスから継承Rectangleクラスである私は、このエラー未定義の参照

を示す保持:

class rectangle: public shape{ 

int width, height; 
public: 
    rectangle(); 

void draw(int width, int height){ 
    for(int i = 1; i <= height; i++){ 
      for(int j = 1; j <= width; j++){ 
       if(i == 1 && i == height) 
        cout<<"*"; 
       else if(j == 1 && j == width) 
        cout<<"*"; 
       else 
        cout<<" "; 
      } 
      cout<<endl; 
     } 
    } 


}; 

これは、形状クラスである:

class shape 
{ 
int x, y; 
char letter; 
public: 
    shape(int x, int y, char letter, int length){ 
     int X = x; 
     int Y = y; 
     int L = letter; 
    } 
    void verLine(){ 
     for(int i = 0; i < 5; i++){ 
      cout<<"*"<<endl; 
     } 
    } 
    void horLine(){ 
     for(int i = 0; i < 5; i++){ 
      cout<<"*"; 
     } 
    } 
    char setLetter(char letter){ 
     int newLetter = letter; 
     return newLetter; 
    } 
    void gotoxy(int x, int y){ 
     HANDLE hConsole; 
     COORD cursorLoe; 
     std::cout.flush(); 
     cursorLoe.X = x; 
     cursorLoe.Y = y; 
     hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
     SetConsoleCursorPosition(hConsole, cursorLoe); 
    } 
}; 

これが主である:

int main() 
{ 
    rectangle r1; 
    cout<<endl; 
    r1.draw(5,5); 
    return 0; 
} 

あなたはデフォルトのコンストラクタを宣言したが、それを定義していない私は、問題は、私は長方形クラスで持っているデフォルトコンストラクタであると思うが、私はそれを

+2

矩形のデフォルトのコンストラクタを定義していないようです。 –

答えて

0

をコーディングする他の方法を見つけるdin't。どこかで関数rectangle::rectangle()を定義する必要があります。実際に何かを行うためにコンストラクタを必要としない場合は、それをまったく宣言する必要はありません。そのため、コンストラクタを定義するか、それを宣言しないでください。

+0

削除したときに削除された関数 'rectangle :: rectangle()'の使用 –

+0

@HaïthemSaoudiこれは、 'shape'にデフォルトコンストラクタがないためです。 'shape'にデフォルトのコンストラクタを渡すか、メンバ初期化リストに' shape(int、int、char、int) 'を呼び出すために' rectangle() 'を明示的に定義してください。 – Xirema

+0

イニシャライザのリストが必要ですhttp://en.cppreference.com/w/cpp/language/initializer_list – Tyger