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

c++ konstruktory i destruktory

0 głosów
679 wizyt
pytanie zadane 25 czerwca 2017 w C i C++ przez wojo44 Nowicjusz (160 p.)

Chciałem zrobić sobie przykład dla zrozumienia konstruktorów i destruktorów. Niestety kompilator pokazuje mi błąd "error: extra qualification 'ciasteczka::' on member 'ciasteczka'". Nie wiem o co chodzi i mam coraz większy mętlik w głowie.

#include<iostream>

using namespace std;

class ciasteczka
{
    public:
    int brat1, brat2, siostra1, siostra2;

    public:
    ciasteczka::ciasteczka()
    {
        cout << "Ile lat ma pierwszy brat? : ";
        cin >> brat1;
        cout << "\n" << "Ile lat ma drugi brat? : ";
        cin >> brat2;
        cout << "\n" << "Ile lat ma pierwsza siostra? : ";
        cin >> siostra1;
        cout << "\n" << "Ile lat ma druga siostra? : ";
        cin >> siostra2;

        cout << "\n\n\nPierwszy brat dostanie " << brat1 << " ciasteczek\n";
        cout << "Drugi brat dostanie " <<brat2 << " ciasteczek\n";
        cout << "Pierwsza siostra dostanie " << siostra1 << " ciasteczek\n";
        cout << "Druga siostra dostanie " << siostra2 << " ciasteczek\n";
    }

    ~ciasteczka() {};
};


int main()
{
    ciasteczka abc;

    cin.get();
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 25 czerwca 2017 przez niezalogowany
edycja 30 sierpnia 2017

Gdy metodę umieszczasz w ciele klasy nie musisz wskazywać do jakiej klasy ona należy (tak samo ze zmiennymi) - jest to błędem. Kompilator szuka w tym momencie klasy ciasteczka w klasie ciasteczka. 

public:
     ciasteczka(){...}
komentarz 25 czerwca 2017 przez wojo44 Nowicjusz (160 p.)

czyli nie wpisywać ciasteczka::ciasteczka(), a zamiast tego samo ciasteczka() ? Czy wiadomo będzie, że to konstruktor a nie zwykła funkcja? Jestem bardzo początkujący, potrzebuję łopatologicznego wytłumaczenia smiley

komentarz 25 czerwca 2017 przez niezalogowany
edycja 25 czerwca 2017

Tak będzie wiadomo ;) Warto nadmienić, że nazwy klas pisze się wielką literą (i konstruktorów). Gdybyś pisał metody poza klasą, albo w osobnych plikach to wtedy musiałbyś używać operatora zasięgu, ale w klasie nadal musiałbyś umieścić prototypy metod bez zasięgu:

class Ciasteczka
{
public:
    int brat1, brat2, siostra1, siostra2;

public:
        
    Ciasteczka();
    ~Ciasteczka();
    
};

Ciasteczka::Ciasteczka()
{
    cout << "Ile lat ma pierwszy brat? : ";
    cin >> brat1;
    cout << "\n" << "Ile lat ma drugi brat? : ";
    cin >> brat2;
    cout << "\n" << "Ile lat ma pierwsza siostra? : ";
    cin >> siostra1;
    cout << "\n" << "Ile lat ma druga siostra? : ";
    cin >> siostra2;

    cout << "\n\n\nPierwszy brat dostanie " << brat1 << " ciasteczek\n";
    cout << "Drugi brat dostanie " <<brat2 << " ciasteczek\n";
    cout << "Pierwsza siostra dostanie " << siostra1 << " ciasteczek\n";
    cout << "Druga siostra dostanie " << siostra2 << " ciasteczek\n";
}

Ciasteczka::~Ciasteczka() {}

Podobne pytania

0 głosów
2 odpowiedzi 883 wizyt
0 głosów
1 odpowiedź 1,009 wizyt

93,728 zapytań

142,668 odpowiedzi

323,283 komentarzy

63,287 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...