eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › dziedziczenie c++
Ilość wypowiedzi w tym wątku: 22

  • 1. Data: 2009-07-02 19:25:15
    Temat: dziedziczenie c++
    Od: "larry2003" <l...@i...pl>

    Witam,

    Jestem mocno początkującą osobą w c++ a mam mały problem w wykorzystywaniu
    dziedziczenia:
    Klasa Football wygląda tak:
    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);
    };
    klasa Silowy, która ma dziedziczyć po Football tak:
    class Silowy : public Football
    {
    public:
    int ile;
    Silowy(int d);
    Silowy();
    void przepychanie_w_polu(void);
    void umiejetny_faul(void);
    void gra_glowa(void);
    };

    i przy kompilacji wyrzuca mi błąd:
    g++ -c silowy.cpp
    In file included from silowy.cpp:1:
    silowy.h:2: error: expected class-name before '{' token
    make: *** [silowy.o] Error 1

    Mógłbym prosić o pomoc w rozwiązaniu tego problemu?




  • 2. Data: 2009-07-02 19:39:03
    Temat: Re: dziedziczenie c++
    Od: Jacek Czerwinski <...@...z.pl>

    larry2003 pisze:
    > Witam,
    >
    > Jestem mocno początkującą osobą w c++ a mam mały problem w wykorzystywaniu
    > dziedziczenia:
    > Klasa Football wygląda tak:
    > class Football
    >
    >

    > klasa Silowy, która ma dziedziczyć po Football tak:
    > class Silowy : public Football

    >
    > i przy kompilacji wyrzuca mi błąd:
    > g++ -c silowy.cpp
    > In file included from silowy.cpp:1:
    > silowy.h:2: error: expected class-name before '{' token
    > make: *** [silowy.o] Error 1
    >
    > Mógłbym prosić o pomoc w rozwiązaniu tego problemu?

    Domyślam się (nie piszesz o tym, zgaduję) że w silowy.h trzeba
    includować footbal.h (nazwy plików przypuszczalne)


  • 3. Data: 2009-07-02 20:00:01
    Temat: Re: dziedziczenie c++
    Od: "larry2003" <l...@i...pl>


    Użytkownik "Jacek Czerwinski" <...@...z.pl> napisał w wiadomości
    news:h2j2cq$n7a$1@news.onet.pl...
    > larry2003 pisze:
    >> Witam,
    >>
    >> Jestem mocno początkującą osobą w c++ a mam mały problem w
    >> wykorzystywaniu dziedziczenia:
    >> Klasa Football wygląda tak:
    >> class Football
    >>
    >
    >> klasa Silowy, która ma dziedziczyć po Football tak:
    >> class Silowy : public Football
    >
    >>
    >> i przy kompilacji wyrzuca mi błąd:
    >> g++ -c silowy.cpp
    >> In file included from silowy.cpp:1:
    >> silowy.h:2: error: expected class-name before '{' token
    >> make: *** [silowy.o] Error 1
    >>
    >> Mógłbym prosić o pomoc w rozwiązaniu tego problemu?
    >
    > 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



  • 4. Data: 2009-07-02 20:25:53
    Temat: Re: dziedziczenie c++
    Od: Tomasz Bywalec <t...@p...dont.spam.me.o2.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


  • 5. Data: 2009-07-02 20:44:16
    Temat: Re: dziedziczenie c++
    Od: "larry2003" <l...@i...pl>


    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



  • 6. Data: 2009-07-03 02:32:32
    Temat: Re: dziedziczenie c++
    Od: "Mariusz Marszałkowski" <b...@g...SKASUJ-TO.pl>


    > 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

    Na pierwszy rzut oka wygląda poprawnie... W poszukiwaniu błędów
    warto "wyrzucić" część kodu, następnie stopniowo dodawać i
    sprawdzać po dodaniu którego elementu błąd się znów pojawi. Skompiluj np.
    taką wersję:

    class Football
    {
    /*
    wyrzucony kod
    */
    };


    class Silowy : public Football
    {
    /*
    wyrzucony kod
    */
    };

    void main()
    {
    /*
    wyrzucony kod
    */
    }

    pozdrawiam


    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


  • 7. Data: 2009-07-03 08:19:33
    Temat: Re: dziedziczenie c++
    Od: Tomasz Bywalec <t...@p...dont.spam.me.o2.pl>

    larry2003 pisze:
    [...]
    > 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
    >

    Błąd występuje podczas kompilacji pliku silowy.cpp którego źródła nie
    pokazałeś - przypuszczam, że nie include'ujesz tam pliku "football.h",
    w związku z czym przy parsowaniu zawartości "silowy.h" klasa Football
    jest nieznana.

    Spróbuj z powrotem dodać do pliku silowy.h include dołączający plik
    football.h, tak aby początek pliku silowy.h wyglądał tak:

    #ifndef SILOWY_H_INCLUDED
    #define SILOWY_H_INCLUDED

    #include "football.h"

    class Silowy : public Football
    ... i dalej reszta pliku...

    W ten sposób za każdym razem gdy dołączana jest definicja klasy Silowy
    jednocześnie dołączana jest definicja klasy Football, oraz jesteś
    zabezpieczony przed kilkukrotnym zainclude'owaniem definicji tej
    samej klasy (include guardy).

    Mam nadzieję że teraz wszystko ruszy :)
    Pozdrawiam,
    Tomek Bywalec


  • 8. Data: 2009-07-03 15:34:59
    Temat: Re: dziedziczenie c++
    Od: "larry2003" <l...@i...pl>


    Użytkownik "Tomasz Bywalec" <t...@p...dont.spam.me.o2.pl> napisał w
    wiadomości news:h2kfh4$7tf$1@nemesis.news.neostrada.pl...
    > larry2003 pisze:
    > [...]
    >> 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
    >>
    >
    > Błąd występuje podczas kompilacji pliku silowy.cpp którego źródła nie
    > pokazałeś - przypuszczam, że nie include'ujesz tam pliku "football.h",
    > w związku z czym przy parsowaniu zawartości "silowy.h" klasa Football
    > jest nieznana.
    >
    > Spróbuj z powrotem dodać do pliku silowy.h include dołączający plik
    > football.h, tak aby początek pliku silowy.h wyglądał tak:
    >
    > #ifndef SILOWY_H_INCLUDED
    > #define SILOWY_H_INCLUDED
    >
    > #include "football.h"
    >
    > class Silowy : public Football
    > ... i dalej reszta pliku...
    >
    > W ten sposób za każdym razem gdy dołączana jest definicja klasy Silowy
    > jednocześnie dołączana jest definicja klasy Football, oraz jesteś
    > zabezpieczony przed kilkukrotnym zainclude'owaniem definicji tej
    > samej klasy (include guardy).
    >
    > Mam nadzieję że teraz wszystko ruszy :)
    > Pozdrawiam,
    > Tomek Bywalec

    Ehh i kolejny problem:) a podobno programowanie jest takie przyjemne :)

    football.h wyglada tak
    #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

    silowy.h:
    #ifndef SILOWY_H_INCLUDED
    #define SILOWY_H_INCLUDED
    #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);
    };
    #endif

    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;
    }

    silowy.cpp tak:

    #include "silowy.h"
    #include <iostream>

    Silowy::Silowy(int d)
    {
    ile=d;
    }

    void Silowy::gra_glowa(void)
    {
    for (int i=0;i<ile;i++)
    std::cout<<"Silowy->gra_glowa()\n";
    }

    void Silowy::przepychanie_w_polu(void)
    {
    for (int i=0;i<ile;i++)
    std::cout<<"Silowy->przepychanie_w_polu()\n";
    }

    void Silowy::umiejetny_faul(void)
    {
    for (int i=0;i<ile;i++)
    std::cout<<"Silowy->umiejetny_faul()\n";
    }

    i w rezultacie po kompilacji:

    g++ -o zaliczenie zaliczenie.o football.o silowy.o
    silowy.o: In function `Silowy::Silowy(int)':
    silowy.cpp:(.text+0x105): undefined reference to `Football::Football()'
    silowy.o: In function `Silowy::Silowy(int)':
    silowy.cpp:(.text+0x121): undefined reference to `Football::Football()'
    collect2: ld returned 1 exit status
    make: *** [zaliczenie] Error 1






  • 9. Data: 2009-07-03 19:24:52
    Temat: Re: dziedziczenie c++
    Od: "Grzegorz Niemirowski" <g...@p...onet.pl>

    larry2003 <l...@i...pl> napisał(a):
    > silowy.cpp:(.text+0x105): undefined reference to `Football::Football()'

    Brakuje bezparametrowego konstruktora.

    --
    Grzegorz Niemirowski
    http://www.grzegorz.net/
    OE PowerTool i aktualności ze świata Outlook Express: grzegorz.net/oe
    Uptime: 0 days, 3 hours, 9 minutes and 35 seconds


  • 10. Data: 2009-07-03 19:37:25
    Temat: Re: dziedziczenie c++
    Od: "larry2003" <l...@i...pl>


    Użytkownik "Grzegorz Niemirowski" <g...@p...onet.pl> napisał w
    wiadomości news:h2llu5$171u$1@opal.icpnet.pl...
    > larry2003 <l...@i...pl> napisał(a):
    >> silowy.cpp:(.text+0x105): undefined reference to `Football::Football()'
    >
    > Brakuje bezparametrowego konstruktora.
    >
    > --
    > Grzegorz Niemirowski
    > http://www.grzegorz.net/
    > OE PowerTool i aktualności ze świata Outlook Express: grzegorz.net/oe
    > Uptime: 0 days, 3 hours, 9 minutes and 35 seconds

    A co to oznacza ?:)


strony : [ 1 ] . 2 . 3


Szukaj w grupach

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: