eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingdziedziczenie c++Re: dziedziczenie c++
  • Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!wsisiz.edu.pl!newsfeed.neostrada.pl!
    atlantis.news.neostrada.pl!news.neostrada.pl!not-for-mail
    From: Tomasz Bywalec <t...@p...dont.spam.me.o2.pl>
    Newsgroups: pl.comp.programming
    Subject: Re: dziedziczenie c++
    Date: Thu, 02 Jul 2009 22:25:53 +0200
    Organization: TP - http://www.tp.pl/
    Lines: 72
    Message-ID: <h2j58o$gbm$1@atlantis.news.neostrada.pl>
    References: <h2j1it$ghr$1@inews.gazeta.pl> <h2j2cq$n7a$1@news.onet.pl>
    <h2j3k4$ppn$1@inews.gazeta.pl>
    NNTP-Posting-Host: abrq236.neoplus.adsl.tpnet.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: atlantis.news.neostrada.pl 1246566489 16758 83.8.110.236 (2 Jul 2009
    20:28:09 GMT)
    X-Complaints-To: u...@n...neostrada.pl
    NNTP-Posting-Date: Thu, 2 Jul 2009 20:28:09 +0000 (UTC)
    User-Agent: Thunderbird 2.0.0.22 (Windows/20090605)
    In-Reply-To: <h2j3k4$ppn$1@inews.gazeta.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:182494
    [ ukryj nagłówki ]

    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

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: