klasy pochodne - dziedziczenie

0

Pisze program w kotrym 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:

#include "boisko.h"
#include "zawodnik.h"
#include "wr.h"
#include <iostream>

using namespace std;

extern boisko ekran;

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

int main()

{

    wr gracz[4];

    wr gracz[0]("WR",9, 81,1,0, pozycja[0],sciezka[0]);
    wr gracz[1]("WR",7,82,2,0, pozycja[1],sciezka[1]);
    wr gracz[2]("WR",4, 83,3,0, pozycja[2],sciezka[2]);
    wr  gracz[3]("WR",3,84,4,0, pozycja[3],sciezka[3]);

plik zawodnicy.h:


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

};

#endif

plik wr.h:

#ifndef WR_H_
#define WR_H_
#include <iostream>

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(const char* nazwa,int speed,int nr,int kt_gracz, int step, int poz, int way) // tu wyskakuje blad
{
}

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

  friend class boisko;

};

#endif

Komunikat po uruchomieniu kompilatora:

== Build: Debug in mecz (compiler: Copy of GNU GCC Compiler) ===

D:\C++\mecz\boisko.h|18|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\boisko.h|19|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\wr.h||In constructor 'wr::wr(const char*, int, int, int, int, int, int)':|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'const'|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'int'|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'int'|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'int'|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'int'|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'int'|
D:\C++\mecz\wr.h|16|error: expected primary-expression before 'int'|

Czy możecie napisać co jest nie tak??
Dzieki za pomoc

1
:zawodnik(nazwa,speed,nr,kt_gracz,step,poz,way) // tu jest konkretne wywołanie a nie lista potencjalnych paramterów
0

Dzieki _13th_Dragon. Juz prawie działa. Musialem jeszcze zazanczyc ze klasa zawodnik jest zaprzyjazniona z klasa wr. Niestety program mi sie wysypuje :

#include "boisko.h"
#include "zawodnik.h"
#include "wr.h"
#include <iostream>

using namespace std;

extern boisko ekran;

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

int main()

{

    wr gracz[4];  // teraz tutaj jest błąd:(

    wr gracz[0]("WR",9, 81,1,0, pozycja[0],sciezka[0]);
    wr gracz[1]("WR",7,82,2,0, pozycja[1],sciezka[1]);
    wr gracz[2]("WR",4, 83,3,0, pozycja[2],sciezka[2]);
    wr  gracz[3]("WR",3,84,4,0, pozycja[3],sciezka[3]);

Zapis z kompilatora:

== Build: Debug in mecz (compiler: Copy of GNU GCC Compiler) ===

D:\C++\mecz\boisko.h|18|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\boisko.h|19|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\boisko.h|18|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\boisko.h|19|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\main.cpp||In function 'int main()':|
D:\C++\mecz\main.cpp|49|error: no matching function for call to 'wr::wr()'|
D:\C++\mecz\main.cpp|49|note: candidates are:|
D:\C++\mecz\wr.h|15|note: wr::wr(const char*, int, int, int, int, int, int)|
D:\C++\mecz\wr.h|15|note: candidate expects 7 arguments, 0 provided|
D:\C++\mecz\wr.h|7|note: wr::wr(const wr&)|
D:\C++\mecz\wr.h|7|note: candidate expects 1 argument, 0 provided|
D:\C++\mecz\main.cpp|104|error: conflicting declaration 'wr gracz [0]'|
D:\C++\mecz\main.cpp|49|error: 'gracz' has a previous declaration as 'wr gracz [4]'|
D:\C++\mecz\main.cpp|105|error: conflicting declaration 'wr gracz [1]'|
D:\C++\mecz\main.cpp|49|error: 'gracz' has a previous declaration as 'wr gracz [4]'|
D:\C++\mecz\main.cpp|106|error: conflicting declaration 'wr gracz [2]'|
D:\C++\mecz\main.cpp|49|error: 'gracz' has a previous declaration as 'wr gracz [4]'|
D:\C++\mecz\main.cpp|107|error: conflicting declaration 'wr gracz [3]'|
D:\C++\mecz\main.cpp|49|error: 'gracz' has a previous declaration as 'wr gracz [4]'|
D:\C++\mecz\main.cpp|83|warning: unused variable 'w_pozycja' [-Wunused-variable]|
== Build failed: 9 error(s), 5 warning(s) (0 minute(s), 0 second(s)) ===

1

Tak nie można, tu wr gracz[4]; już masz skonstruowano 4-ch graczy z konstruktorami których nie ma.

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]),
   };

Jest jeszcze kilka sposobów, tylko że nie będę tu rozdział kursu przytaczać.
Weź sobie jakiś kurs przeczytaj, bo pytasz o podstawy podstaw.

0

Moj program juz prawie dziala...
Teraz mam problem prawdopodobnie z hermetyzacja.
Probuje wsadzic metode klasy pochodnej WR z klasy zawodnik do obiektu ekran klasy boisko, wyskakuje mi komunikat:

== Build: Debug in mecz (compiler: Copy of GNU GCC Compiler) ===

D:\C++\mecz\boisko.h|18|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\boisko.h|19|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]|
D:\C++\mecz\main.cpp||In function 'int main()':|
D:\C++\mecz\main.cpp|183|error: 'zawodnik' is an inaccessible base of 'wr'|
D:\C++\mecz\main.cpp|89|warning: unused variable 'w_pozycja' [-Wunused-variable]|
== Build failed: 1 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===

Pliki po modyfikacjach:

klasa podstawowa zawodnik.h:


#ifndef ZAWODNIK_H_
#define ZAWODNIK_H_
#include <iostream>
#include<cstring>

using namespace std;

class zawodnik

{

protected:

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

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;
  friend class wr;

};

#endif

klasa pochodna wr.h:


#ifndef WR_H_
#define WR_H_
#include <iostream>

using namespace std;

class wr : protected 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  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 głowny main.cpp



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

    cout<<" Podaj ilosc zawodnikow :"<<endl;
    cin>>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]),
    };

        ekran.wyczysc();
        ekran.napisz();
        ekran.markery();

        for(int z=0; z<zawodnicy; z++)
        {

            ekran.poz_zaw(gracz[z]);  // tu wyskakuje blad

        }

    }

    return 0;
}
```cpp
0

D:\C++\mecz\main.cpp|183|error: 'zawodnik' is an inaccessible base of 'wr' -> oznacza że próbujesz dostać się do któregoś z pół klasy zawodnik.
W pozostałych wyraźnie napisano jak naprawić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0