eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingdziedziczenie c++ › Re: dziedziczenie c++
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: "larry2003" <l...@i...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: dziedziczenie c++
    Date: Thu, 2 Jul 2009 22:44:16 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 147
    Message-ID: <h2j673$7rh$1@inews.gazeta.pl>
    References: <h2j1it$ghr$1@inews.gazeta.pl> <h2j2cq$n7a$1@news.onet.pl>
    <h2j3k4$ppn$1@inews.gazeta.pl> <h2j58o$gbm$1@atlantis.news.neostrada.pl>
    NNTP-Posting-Host: 87-205-89-247.adsl.inetia.pl
    X-Trace: inews.gazeta.pl 1246567459 8049 87.205.89.247 (2 Jul 2009 20:44:19 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Thu, 2 Jul 2009 20:44:19 +0000 (UTC)
    X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
    X-Priority: 3
    X-RFC2646: Format=Flowed; Response
    X-User: cezaryk2008
    X-Antivirus: avast! (VPS 090702-0, 2009-07-02), Outbound message
    X-MSMail-Priority: Normal
    X-Antivirus-Status: Clean
    X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
    Xref: news-archive.icm.edu.pl pl.comp.programming:182496
    [ ukryj nagłówki ]


    Użytkownik "Tomasz Bywalec" <t...@p...dont.spam.me.o2.pl> napisał w
    wiadomości news:h2j58o$gbm$1@atlantis.news.neostrada.pl...
    > larry2003 pisze:
    >> Użytkownik "Jacek Czerwinski" <...@...z.pl> napisał w wiadomości
    >> news:h2j2cq$n7a$1@news.onet.pl...
    > [...]
    >>> Domyślam się (nie piszesz o tym, zgaduję) że w silowy.h trzeba
    >>> includować footbal.h (nazwy plików przypuszczalne)
    >>>
    >>
    >> Ok, czyli jak rozumiem silowy.h powinien wyglądać następująco:
    >>
    >> #include "football.h"
    >> class Silowy : public Football
    >> {
    >> public:
    >> int ile;
    >> Silowy(int d);
    >> Silowy();
    >> void przepychanie_w_polu(void);
    >> void umiejetny_faul(void);
    >> void gra_glowa(void);
    >> };
    >> z tym że z taką wersją silowy.h kompilator wyrzuca:
    >>
    >> g++ -c zaliczenie.cpp
    >> In file included from silowy.h:1,
    >> from zaliczenie.cpp:2:
    >> football.h:1: error: redefinition of 'class Football'
    >> football.h:3: error: previous definition of 'class Football'
    >> make: *** [zaliczenie.o] Error 1
    >>
    >>
    >
    > To by mogło oznaczać, że w 'zaliczenie.cpp' już include'ujesz
    > plik 'football.h' i kompilator dostaje definicję klasy
    > Football zdublowaną (tylko dlaczego w takim razie wcześniej
    > pojawiał się błąd przy kompilacji klasy Silowy?).
    >
    > Ale, tak czy owak, możesz spróbować dodać include-guard'y do
    > swoich plików nagłówkowych (z tego co widzę brakuje ich w Twoim
    > programie). To w zasadzie podstawy pisania w C++ więc i tak
    > Ci się to przyda. Na początku i końcu pliku football.h dodajesz
    > następujące 3 linijki:
    >
    > #ifndef FOOTBALL_H_INCLUDED
    > #define FOOTBALL_H_INCLUDED
    >
    > // tu zawartość pliku
    >
    > #endif
    >
    > a w silowy.h prawie to samo, ale nieco inaczej:
    >
    > #ifndef SILOWY_H_INCLUDED
    > #define SILOWY_H_INCLUDED
    >
    > // tu zawartość pliku
    >
    > #endif
    >
    > i podobnie w innych plikach nagłówkowych.
    >
    > Ta "sztuczka" zapobiega kilkukrotnemu załączeniu jednego pliku
    > podczas kompilacji.
    > Symbole FOOTBALL_H_INCLUDED i SILOWY_H_INCLUDED są tylko przykładami -
    > równie dobrze mogłyby to być np. BLABLA111_X i TDTD_1234. Ważne
    > jest aby w danym pliku .h w linijce z #ifndef i #define użyty był
    > ten sam symbol i aby symbole te nie powtarzały się w różnych plikach
    > nagłówkowych.
    >
    > Mam nadzieję że to pomoże w rozwiązaniu problemu.
    > Pozdrawiam,
    > Tomek Bywalec

    Dobra to może wkleje jak to teraz wszystko wygląda bo już sie miesza:)
    Plik football.h:
    #ifndef FOOTBALL_H_INCLUDED
    #define FOOTBALL_H_INCLUDED
    class Football

    {
    public:
    int ile;

    Football(int d);
    Football();
    void podaj(void);
    void strzel(void);
    void dosrodkuj(void);
    void odb_pilke(void);
    void drybluj(void);
    void bron(void);
    };

    #endif

    plik silowy.h
    #ifndef SILOWY_H_INCLUDED
    #define SILOWY_H_INCLUDED

    class Silowy : public Football
    {
    public:


    int ile;
    Silowy(int d);
    Silowy();
    void przepychanie_w_polu(void);
    void umiejetny_faul(void);
    void gra_glowa(void);
    };

    #endif
    plik zaliczenie.cpp
    #include "football.h"
    #include "silowy.h"



    int main()

    {
    Football *f1;
    f1=new Football(1);
    f1->podaj();
    f1->dosrodkuj();
    delete f1;

    Silowy *s1;
    s1=new Silowy(1);
    s1->przepychanie_w_polu();
    s1->umiejetny_faul();
    delete s1;

    return 0;
    }
    i po dodaniuch tych trzech linijek w każdym *.h wracam do punktu wyjścia :)

    g++ -c silowy.cpp
    In file included from silowy.cpp:1:
    silowy.h:5: error: expected class-name before '{' token
    make: *** [silowy.o] Error 1


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: