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

Problem z konstruktorami

Object Storage Arubacloud
0 głosów
192 wizyt
pytanie zadane 15 marca 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

Cześć robie zadanie z ksiazki i przy kompilacji wywala mi blad

wiecie co zle napisalem z gory bardzo dziekuje za pomoc :)

#include <iostream>

using namespace std;
class Person {
    static const int LIMIT = 256;
    string lname;
    char fname[LIMIT];

public:
    Person() {
        lname = "";
        fname[0] = '/0';
    }
    Person(string & ln, const char * fn = "HejTy") {
        lname = ln;
        fn = fname;
    }
    Person(string & ln,  char * fn) {
        lname = ln;
        fn = fname;
    }

    void Show()  const {
        cout << fname << " " << lname<<endl;
    }

    void FormalShow() const {
        cout << lname << " " << fname<<endl;
    }

};
int main()
{
    Person one;
    Person two("Staszek");
    Person three("Jacek", "Placek");
    one.Show();
    one.FormalShow();
    two.Show();
    two.FormalShow();
    three.Show();
    three.FormalShow();
    return 0;
}

 

komentarz 15 marca 2019 przez DarthMazut Bywalec (2,990 p.)
Myślę, że pomocne by było gdybyś napisał chociaż treść owego błędu. :)

2 odpowiedzi

+1 głos
odpowiedź 15 marca 2019 przez Hiskiel Pasjonat (22,830 p.)
wybrane 15 marca 2019 przez Michał_Warmuz
 
Najlepsza
fname[0]='/0' -> fname[0]='\0'

Nie wiem po co używasz const char*, skoro masz stringa... którego też używasz. 

Z innych rzeczy
 1. Używasz VLA, które raczej nie jest dobrą praktyką.
 2. W konstruktorach z argumentami przypisujesz do argumentu zmienną z klasy
 3. Nie widzę sensu robienia void jako const.
 4. W konstruktorze możesz użyć listy inicjalizacyjnej
 5. Kod Ci się nie skompiluje w przypadku np.
 

Person two ("Staszek")
Person three("Jacek", "Placek")

z uwagi na użycie r-val, gdzie konstruktor oczekuje l-val 
Poczytaj o Rule of Five (kiedyś Rule of Three, ale nagle BANG! i C++11)

1
komentarz 15 marca 2019 przez niezalogowany

To jeszcze dwa błędy zostały...

komentarz 15 marca 2019 przez Hiskiel Pasjonat (22,830 p.)
Dzięki, poprawiłem.
komentarz 15 marca 2019 przez Michał_Warmuz Mądrala (5,830 p.)
Robie tak bo mam tak  w książce a zadaniem było dopisać dwa konstruktory oraz metody show i formlshow
komentarz 15 marca 2019 przez niezalogowany
Doczepiłbym się do tego, że w kodzie nie ma VLA. Może i dodanie const do deklaracji funkcji nie jest koniecznie, aby kod działał, ale to dobra praktyka i pomaga wykrywać błędy w bardziej złożonych problemach.
0 głosów
odpowiedź 15 marca 2019 przez MsMaciek123 Pasjonat (24,760 p.)
Jakie środowisko (np. CodeBlocks)

Jakie błędy? :/

Podobne pytania

0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 27 września 2020 w C i C++ przez michh123 Bywalec (2,790 p.)
0 głosów
2 odpowiedzi 476 wizyt

92,761 zapytań

141,685 odpowiedzi

320,483 komentarzy

62,105 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

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!

...