Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

dziedziczenie - klasy pochodne

Ostatnio zmodyfikowano 2015-12-28 16:47
Autor Wiadomość
polsky77
Temat założony przez niniejszego użytkownika
dziedziczenie - klasy pochodne
» 2015-12-27 20:31:21
Pisze program w ktorym klasa wr dziedziczy z klasy zawodnik wszystkie argumenty. Klasa wr jest rozszerzona wzgledem klasy zawodnik o metody.
Niestety w trakcie kompilacji wyskakuje blad:(
Plik main:


C/C++
#include "boisko.h"
#include "zawodnik.h"
#include "wr.h"


using namespace std;

extern boisko ekran;


int * tablica;
int * krok;
int * sciezka;
int * gracz;
int * pozycja;

int main()

{
    int zawodnicy;
   
   
    krok = new int[ 24 ];
    int * w_krok = krok;
   
    sciezka = new int[ zawodnicy ];
    int * w_sciezka = sciezka;
   
    wr gracz[] =
    {
        wr( "WR", 9, 81, 1, 0, pozycja[ 0 ], sciezka[ 0 ] ),
        wr( "WR", 7, 82, 2, 0, pozycja[ 1 ], sciezka[ 1 ] ),
        wr( "WR", 4, 83, 3, 0, pozycja[ 2 ], sciezka[ 2 ] ),
        wr( "WR", 3, 84, 4, 0, pozycja[ 3 ], sciezka[ 3 ] ),
    };


plik wr.h:

C/C++
#ifndef WR_H_
#define WR_H_
#include <iostream>

using namespace std;

class wr
    : public zawodnik
{ // wiersz 9
   
   
public:
   
    wr( const char * nazwa, int speed, int nr, int kt_gracz, int step, int poz, int way )
        : zawodnik( nazwa, speed, nr, kt_gracz, step, poz, way ) // wiersz 16
    {
    }
   
   
   
   
    void quick_out( int * krok, int * sciezka, int czas, int z );
    void slant( int * krok, int * sciezka, int czas, int z );
    void out( int * krok, int * sciezka, int czas, int z );
    void in( int * krok, int * sciezka, int czas, int z );
    void w_prawo( int * krok, int * sciezka, int czas, int z );
    void w_lewo( int * krok, int * sciezka, int czas, int z );
    void wypisz()
    {
        cout << "\t # " << numer << "\t" << nazwisko << "\t" << " szybkosc : " << szybkosc << endl;
    }
   
    void pozycja_zaw( int * tablica, int rozmiar )
   
    {
        for( int porzadkowanie = 0; porzadkowanie < rozmiar; porzadkowanie++ )
        {
           
            if( tablica[ porzadkowanie ] ==( numer + 100 ) )
            {
                tablica[ porzadkowanie ] = 0; }
        }
       
       
        tablica[ pozycja ] = numer + 100;
       
       
    }
   
    friend class boisko;
   
};

#endif

plik zawodnik.h:

C/C++
#ifndef ZAWODNIK_H_
#define ZAWODNIK_H_
#include <iostream>
#include<cstring>

using namespace std;

class zawodnik

{
   
    char nazwisko[ 40 ];
    int szybkosc;
    int numer;
    int ktory_gracz;
    int pozycja;
    int sciezka;
    int krok;
   
   
public:
   
    zawodnik( const char * nazwa, int speed, int nr, int kt_gracz, int step, int poz, int way )
   
    {
        strcpy( nazwisko,( nazwa ? nazwa: "Anonim" ) );
        szybkosc = speed;
        pozycja = poz;
        numer = nr;
        ktory_gracz = kt_gracz;
        sciezka = way;
        step = krok;
    }
   
    friend class boisko;
    friend class wr;
   
   
};

#endif


Komunikat z kompilatora:

||=== Build: Debug in mecz (compiler: Copy of GNU GCC Compiler) ===|
||WARNING: Can't read file's timestamp: D:\C++\mecz\pilka.cpp|
D:\C++\mecz\wr.h|9|error: expected class-name before '{' token|
D:\C++\mecz\wr.h||In constructor 'wr::wr(const char*, int, int, int, int, int, int)':|
D:\C++\mecz\wr.h|16|error: class 'wr' does not have any field named 'zawodnik'|
D:\C++\mecz\wr.h||In member function 'void wr::wypisz()':|
D:\C++\mecz\wr.h|31|error: 'numer' was not declared in this scope|
D:\C++\mecz\wr.h|31|error: 'nazwisko' was not declared in this scope|
D:\C++\mecz\wr.h|31|error: 'szybkosc' was not declared in this scope|
D:\C++\mecz\wr.h||In member function 'void wr::pozycja_zaw(int*, int)':|
D:\C++\mecz\wr.h|40|error: 'numer' was not declared in this scope|
D:\C++\mecz\wr.h|46|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\wr.h|46|error: 'numer' was not declared in this scope|
D:\C++\mecz\WR .cpp||In member function 'void wr::quick_out(int*, int*, int, int)':|
D:\C++\mecz\WR .cpp|13|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\WR .cpp|17|error: 'szybkosc' was not declared in this scope|
D:\C++\mecz\WR .cpp||In member function 'void wr::slant(int*, int*, int, int)':|
D:\C++\mecz\WR .cpp|69|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\WR .cpp|72|error: 'szybkosc' was not declared in this scope|
D:\C++\mecz\WR .cpp||In member function 'void wr::out(int*, int*, int, int)':|
D:\C++\mecz\WR .cpp|116|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\WR .cpp|119|error: 'szybkosc' was not declared in this scope|
D:\C++\mecz\WR .cpp||In member function 'void wr::in(int*, int*, int, int)':|
D:\C++\mecz\WR .cpp|163|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\WR .cpp|166|error: 'szybkosc' was not declared in this scope|
D:\C++\mecz\WR .cpp||In member function 'void wr::w_prawo(int*, int*, int, int)':|
D:\C++\mecz\WR .cpp|214|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\WR .cpp|219|error: 'szybkosc' was not declared in this scope|
D:\C++\mecz\WR .cpp||In member function 'void wr::w_lewo(int*, int*, int, int)':|
D:\C++\mecz\WR .cpp|241|error: 'pozycja' was not declared in this scope|
D:\C++\mecz\WR .cpp|244|error: 'szybkosc' was not declared in this scope|
||=== Build failed: 20 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|

Czy możecie napisać co jest nie tak??
Dzieki za pomoc
P-142430
mateczek
» 2015-12-27 21:01:09
C/C++
int main()

{
    int zawodnicy;
   
   
    krok = new int[ 24 ];
    int * w_krok = krok;
   
    sciezka = new int[ zawodnicy ];
    int * w_sciezka = sciezka;
   
    wr gracz[] =
    {
        { "WR", 9, 81, 1, 0, pozycja[ 0 ], sciezka[ 0 ] },
        { "WR", 7, 82, 2, 0, pozycja[ 1 ], sciezka[ 1 ] },
        { "WR", 4, 83, 3, 0, pozycja[ 2 ], sciezka[ 2 ] },
        { "WR", 3, 84, 4, 0, pozycja[ 3 ], sciezka[ 3 ] }
    };
   
}
P-142432
carlosmay
» 2015-12-27 21:01:43
extern boisko, ekran;
P-142433
polsky77
Temat założony przez niniejszego użytkownika
» 2015-12-27 21:14:42
To nie to chłopaki, problem tkwi gdzie indziej:(
P-142434
mateczek
» 2015-12-27 21:34:50
problemów jest więcej!!!

1 - int * pozycja; - pozycja ma być tablicą?? brak rezerwacji pamięci !!!
2 - sciezka = new int[ zawodnicy ] - tablica ma mieć znany rozmiar!!!
3 - pełno funkcji bez deklaracji (same definicje)!!!
4 - gdy chcesz by klasa dziedzicząca miała dostęp do składników klasy podstawowej to po prostu dajesz protected:
C/C++
class zawodnik

{
protected:
    char nazwisko[ 40 ];
    int szybkosc;
    int numer;
    int ktory_gracz;
    int pozycja;
P-142438
polsky77
Temat założony przez niniejszego użytkownika
» 2015-12-28 16:47:52
Dzieki mateczek, juz prawie działa:)
Zmodyfikowałem troche mój program :

plik zawodnik.h - klasa podstawowa
C/C++
#ifndef ZAWODNIK_H_
#define ZAWODNIK_H_
#include <iostream>
#include<cstring>

using namespace std;

class zawodnik

{
   
   
    char nazwisko[ 40 ]; // linia 13
    int szybkosc;
    int numer;
    int ktory_gracz;
    int pozycja;
    int sciezka;
    int krok;
   
   
public:
   
    zawodnik( const char * nazwa, int speed, int nr, int kt_gracz, int step, int poz, int way )
   
    {
        strcpy( nazwisko,( nazwa ? nazwa: "Anonim" ) );
        szybkosc = speed;
        pozycja = poz;
        numer = nr;
        ktory_gracz = kt_gracz;
        sciezka = way;
        step = krok;
    }
   
   
    friend class boisko;
   
   
};

#endif

klasa pochodna wr.h:
C/C++
c++:

#ifndef WR_H_
#define WR_H_
#include <iostream>
#include "zawodnik.h"

using namespace std;


class wr
    : public zawodnik
{
   
   
   
public:
   
    wr( const char * nazwa, int speed, int nr, int kt_gracz, int step, int poz, int way )
        : zawodnik( nazwa, speed, nr, kt_gracz, step, poz, way )
    {
       
    }
   
   
    void quick_out( int * krok, int * sciezka, int czas, int z );
    void slant( int * krok, int * sciezka, int czas, int z );
    void out( int * krok, int * sciezka, int czas, int z );
    void in( int * krok, int * sciezka, int czas, int z );
    void w_prawo( int * krok, int * sciezka, int czas, int z );
    void w_lewo( int * krok, int * sciezka, int czas, int z );
    void wypisz()
    {
        cout << "\t # " << numer << "\t" << nazwisko << "\t" << " szybkosc : " << szybkosc << endl; // linia 35
    }
    void pozycja_zaw( int * tablica, int rozmiar )
   
    {
        for( int porzadkowanie = 0; porzadkowanie < rozmiar; porzadkowanie++ )
        {
           
            if( tablica[ porzadkowanie ] ==( numer + 100 ) ) // linia 43
            {
                tablica[ porzadkowanie ] = 0;
            }
        }
       
       
        tablica[ pozycja ] = numer + 100; // linia 50
       
       
       
    }
   
    friend class boisko;
   
   
   
};

#endif
Rozumiem ze klasa pochodna nie ma dostępu do klasy głównej - jak sobie z tym poradzic??






















P-142475
« 1 »
  Strona 1 z 1