• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

OOP - error: use of deleted function...

Object Storage Arubacloud
0 głosów
210 wizyt
pytanie zadane 4 maja 2018 w C i C++ przez Prime_Bull Obywatel (1,820 p.)

Uczę się programowania obiektowego i nie rozumiem co robię źle:
 

#include <iostream>

using namespace std;

class Test {
    string test_name;
    unsigned int test_count;

public:
    Test(string test_name, unsigned int test_count) {
        this->test_name = test_name;
        this->test_count = test_count;
    }

    string getName() {
        return test_name;
    }

    unsigned int getTestCount() {
        return test_count;
    }
};

class Input : public Test {

public:
    void generateInput() {
        cout << "test";
    }
};

int main() {
    Test t1("tescik", 5);
    cout << t1.getName() << endl;
    cout << t1.getTestCount() << endl;

    Input asd;
    asd.generateInput();


    return 0;
}
||=== Build: Debug in time_measure_classes (compiler: GNU GCC Compiler) ===|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp||In function 'int main()':|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|37|error: use of deleted function 'Input::Input()'|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|24|note: 'Input::Input()' is implicitly deleted because the default definition would be ill-formed:|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|24|error: no matching function for call to 'Test::Test()'|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|10|note: candidate: Test::Test(std::__cxx11::string, unsigned int)|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|10|note:   candidate expects 2 arguments, 0 provided|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|5|note: candidate: Test::Test(const Test&)|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|5|note:   candidate expects 1 argument, 0 provided|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|5|note: candidate: Test::Test(Test&&)|
C:\Users\przem\Documents\Programming\time_measure_classes\main.cpp|5|note:   candidate expects 1 argument, 0 provided|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

 

1 odpowiedź

+1 głos
odpowiedź 4 maja 2018 przez RafalS VIP (122,820 p.)
wybrane 4 maja 2018 przez Prime_Bull
 
Najlepsza
Input asd;

Klasa pochodna jest odpowiedzialna za utworzenie klasy bazowej. Jeśli istnieje konstruktor domyślny to kompilator sam wywoła ten konstruktor przed stworzeniem obiektu pochodnego. Gdy klasa bazowa nie posiada konstruktora domyślnego to trzeba wywołać jeden z jej konstruktorów jawnie na liście inicjalizacyjnej konstruktora klasy pochodnej.
Próbujesz wywołać domyślny (bezargumentowy) konstruktor klasy Input, który nie istnieje. W normalnej sytuacji taki konstruktor jest generowany automatycznie. Gdy zdefiniujesz jakikolwiek konstruktor to domyślny konstruktor nie jest generowany automatycznie. Z tego powodu w klasie bazowej Test brakuje konstruktora domyślnego, przez co nie został także wygenerowany domyślny konstruktor klasy pochodnej Input.
Dodaj bezargumentowy konstruktor w klasie bazowej, lub w kostruktorze klasy pochodnej wywołaj jawnie na liście inicjalizacyjnej konstruktor klasy bazowej:

Input() : Test("",0) {}
1
komentarz 4 maja 2018 przez RafalS VIP (122,820 p.)
Zresztą kompilator pięknie Ci opowiedział :P:
use of deleted function 'Input::Input()'
czyli próbujesz wywołać usunięty konstruktor
'Input::Input()' is implicitly deleted because the default definition would be ill-formed:
domyślny konstruktor Input() został niejawnie usunięty bo domyślna definicja byłaby niepoprawna
no matching function for call to 'Test::Test()
byłaby niepoprawna, bo klasa bazowa Test nie ma konstruktora domyślnego, który próbowała wywołać domyślna implementacja konstruktura Input.
Potem wypisuje dostępne konstruktory.
komentarz 4 maja 2018 przez Prime_Bull Obywatel (1,820 p.)
A podane parametry dla konstruktora Test, czyli (" ", 0) mają tylko informować kompilator o typie i ilości parametrów, tak?
1
komentarz 4 maja 2018 przez RafalS VIP (122,820 p.)
Nie. Te wartości zostaną normalnie wstawione w pola, bo konstruktor został wywołany. Normalnie wstawiasz tam odpowiednie wartości przekazane w argumentach wywołanego konstruktora, ale można też zainicjować te pola jakimiś domyslnymi wartościami. Ja wybrałem pusty string i 0.

Podobne pytania

0 głosów
1 odpowiedź 710 wizyt
0 głosów
1 odpowiedź 132 wizyt
pytanie zadane 23 stycznia 2023 w C i C++ przez Marcinuq Użytkownik (640 p.)
0 głosów
4 odpowiedzi 1,563 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez niezalogowany

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...