Problem z Rectangle:Square "C2512 - Rectangle: niedostepny odpowiedni konstruktor domyslny"
Ostatnio zmodyfikowano 2022-02-19 19:14
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ć? :) #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; } |
|
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): Square( int a, int b ) = default;
/edit: Default nie działa dla konstruktorów innych niż domyślny/kopiujący/przeniesienia. |
|
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; } }; |
|
« 1 » |