Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z Rectangle:Square "C2512 - Rectangle: niedostepny odpowiedni konstruktor domyslny"

Ostatnio zmodyfikowano 2022-02-19 19:14
Autor Wiadomość
leo21323189
Temat założony przez niniejszego użytkownika
Problem z Rectangle:Square "C2512 - Rectangle: niedostepny odpowiedni konstruktor domyslny"
» 2022-01-04 15:57:32
Szanowni Forumowicze,

Mam problem z poniższym kodem. Gdy tworzę obiekt Rectangle r1 dziedziczący od Shape - wszystko śmiga. Gdy chcę stworzyć obiekt Square s1 dziedziczący po Rectangle mam błąd "C2512 "Rectangle": niedostępny odpowiedni konstruktor domyślny". Ktoś coś jak to naprawić? :)

C/C++
#include <iostream>

using namespace std;

class Shape
{
public:
   
virtual int calculateField() = 0;
};

class Rectangle
    : Shape
{
public:
   
int a;
   
int b;
   
   
Rectangle( int a, int b ) {
       
this->a = a;
       
this->b = b;
   
}
   
   
int calculateField() {
       
return a * b;
   
}
}
;

class Square
    : public Rectangle
{
public:
   
int a;
   
   
Square( int a ) {
       
this->a = a;
   
}
   
   
int calculateField() {
       
return a * a;
   
}
}
;


int main()
{
   
Rectangle r1( 10, 5 );
   
cout << r1.calculateField() << endl;
   
   
Square s1( 5 );
   
cout << s1.calculateField() << endl;
   
system( "pause" );
   
return 0;
}
P-179171
DejaVu
» 2022-01-04 16:00:50
Jeżeli dziedziczysz po klasie X to musisz zdefiniować konstruktory, które mają być dostępne w nowej klasie. Czytaj: jeżeli zdefiniujesz chociaż jeden konstruktor w nowej klasie, to wszystkie inne są niewidoczne w momencie gdy tworzysz obiekt. Możesz ewentualnie spróbować dodać konstruktor Square z odpowiednimi parametrami i użyć słowa kluczowego default, aby użyć 'domyślnej' implementacji (być może zadziała - feature z C++11):
C/C++
Square( int a, int b ) = default;

/edit:
Default nie działa dla konstruktorów innych niż domyślny/kopiujący/przeniesienia.
P-179172
leo21323189
Temat założony przez niniejszego użytkownika
» 2022-02-19 19:14:05
Zadziałał konstruktor 2-arg. Pozdrawiam

class Square : public Rectangle {
public:
    int a;
    Square(int a) : Rectangle(a, b) {
        this->a = a;
    }
    int calculateField() {
        return a * a;
    }
};
P-179294
« 1 »
  Strona 1 z 1