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

c++ konstruktory i destruktory

VPS Starter Arubacloud
0 głosów
493 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 661 wizyt
0 głosów
1 odpowiedź 818 wizyt

93,079 zapytań

142,042 odpowiedzi

321,448 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...