Qt creator - błedy przy kompilacji

0

Witam, tworzę grę z kilkoma klasami, coś ala snake. Do momentu kiedy cały kod zawarty był w jednym pliku, kompilacja przebiegała bez problemów, natomiast po podziału kodu na pliki klas i plik źródłowy program wywala szereg błędów przy kompilacji (wszystkie błędy w pliku w załączniku). Załączam również diagram UML. Zdaje sobie sprawę że kod może zawierać błędy niewłaściwe dla samej gry (jest jeszcze nie etapie pisania, poza tym dopiero uczę się programować) , ale proszę jedynie o pomoc tak by mój program mógł kompilować się bez żadnych błędów. A oto kod:

CBiedronka.h

#ifndef CBIEDRONKA_H
#define CBIEDRONKA_H

#include "COwad.h"

class CBiedronka : public COwad
{
private:
    double energia;
public:
    CBiedronka();
    CBiedronka(int, int, double, bool);
   ~CBiedronka();
    double getE();
    void krok(int , bool);

};

#endif // CBIEDRONKA_H

CBiedronka.cpp

 
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include "CBiedronka.h"

using namespace std;

CBiedronka::CBiedronka() : COwad()
{
    x=0;
    y=0;
    energia=100;
    isAlive=true;
}

CBiedronka::CBiedronka(int xp, int yp, double ep, bool isA)
{
    x=xp;
    y=yp;
    energia=ep;
    isAlive=isA;
}

CBiedronka::~CBiedronka()
{
    cout<<"Twoja biedronka zginela "<<endl;
}


double CBiedronka::getE()
{
    return energia;
}


void CBiedronka::krok(int kierunek, bool czySzybko)
{
    int a;
    double e;
    int znak;

    if (czySzybko)
    {
        a=3;
        e=1.5;
    }
    else
    {
        a=1;
        e=0.2;
    }


    if (kierunek==1)
    {
    znak=getch();

    switch (znak)
    {
    case '8':
          x-=a;
          energia-=e;
    break;
    case '2':
          x+=a;
          energia-=e;;
    break;
    case '6':
          y+=a;
          energia-=e;
    break;
    case '4':
         y-=a;
         energia-=e;
    break;
    }
    }
    else if (kierunek==2)
    {
    znak=getch();

    switch (znak)
    {
    case 'w':
          x-=a;
          energia-=e;
    break;
    case 's':
          x+=a;
          energia-=e;;
    break;
    case 'd':
          y+=a;
          energia-=e;
    break;
    case 'a':
         y-=a;
         energia-=e;
    break;
    }
  }
}		

CGra.h

#ifndef CGRA_H
#define CGRA_H

class CGra
{
private:
    CBiedronka *gracze[2];
    int licznik;
    void rysujPlansze();
public:
    CGra();
    void generujPodsumowanie();
    void graj();
    ~CGra();
};

#endif // CGRA_H 

CGra.cpp

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include "CGra.h"

using namespace std;

    void CGra::rysujPlansze()
    {
        char tab1[20][60];
        char tab2[10];

        for (int i=0; i<20; i++)
        {
            for (int j=0; j<60; j++)
            {
                tab1[i][j]=' ';
            }

        }  system("cls");

        tab1[gracze[0]->getX()][gracze[0]->getY()]='@';
        tab1[gracze[1]->getX()][gracze[1]->getY()]='X';
        tab1[COowad[0]->getX()][COowad[0]->getY()]=COowad[0]->getSymbol();


        cout << " ------------------------------------------------------------" << endl;

        for (int i=0; i<20; i++)
        {cout<<"|";
            for (int j=0; j<60; j++)
            {
                cout<<tab1[i][j];

            }cout<<"|";
             cout<<endl;
        }
        cout << " ------------------------------------------------------------" << endl;


        cout<<"Biedronka 1: [energia: "<<gracze[0]->getE()<<"%]";           ///1

        for (int k=0; k<(gracze[0]->getE())/10; k++)
        {
            tab2[k]='|';
            cout<<tab2[k];
        }


        cout<<"[stan: ";
        (gracze[0]->getIsAlive()) ? cout<<"zywa] " : cout<< "martwa ]";
        cout<<endl;


        cout<<"Biedronka 2: [energia: "<<gracze[1]->getE()<<"%]";            ///2

        for (int k=0; k<(gracze[1]->getE())/10; k++)
        {
            tab2[k]='|';
            cout<<tab2[k];
        }


        cout<<"[stan: ";
        (gracze[1]->getIsAlive()) ? cout<<"zywa] " : cout<< "martwa ]";
        cout<<endl;

    }



    CGra::CGra()
    {
        gracze[0]=new CBiedronka(5,5,5,true);
        gracze[1]=new CBiedronka(15,15,100,false);
        COowad[0]=new COwad();
        licznik=0;
        rysujPlansze();

    }

    void CGra::generujPodsumowanie()
    {
        cout<<"Game over ";
    }

    void CGra::graj()
    {
        CGra();
        while ((gracze[0]->getE()>0) && (gracze[1]->getE()>0))
        {

            rysujPlansze();
            gracze[0]->krok(1,1);
            gracze[1]->krok(2,1);
        }
    }

    CGra::~CGra()
    {
        delete gracze[0];
        delete gracze[1];
        delete COowad[0];
        generujPodsumowanie();

    }		

COwad.h

 
#ifndef COWAD_H
#define COWAD_H

class COwad
{
protected:
    int x;
    int y;
    char symbol;
    bool isAlive;
public:
    COwad();
    COwad(int, int, char, bool);
    ~COwad();
    int getX();
    int getY();
    double getSymbol();
    bool getIsAlive();
    virtual void krok(int, bool);
    bool operator==(const COwad& arg2);
    void setIsDead();
};

#endif // COWAD_H	

COwad.cpp

 
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include "COwad.h"

using namespace std;


    COwad::COwad()

    {
        x=rand()%26;
        y=rand()%26;
        symbol='$';
        isAlive=true;
    }

    COwad::COwad(int xp, int yp, char symb, bool isAl)
    {
        x=xp;
        y=yp;
        symbol=symb;
        isAlive=isAl;
    }

    COwad::~COwad()
    {

    }

    int COwad::getX()
    {
        return x;
    }

    int COwad::getY()
    {
        return y;
    }

    double COwad::getSymbol()
    {
        return symbol;
    }

    bool COwad::getIsAlive()
    {
        return isAlive;
    }

    void COwad::krok(int kierunek, bool czySzybko)
    {
        x=rand()%2;
        y=rand()%2;

        switch (x)
        {
        case 0: x+=1;
            break;
        case 1: x-=1;
            break;
        case 2: x=x;
        }


        switch (y)
        {
        case 0: y+=1;
            break;
        case 1: y-=1;
            break;
        case 2: y=y;
        }

    }

    bool COwad::operator==(const COwad& arg2)
    {
        if ((this->x==arg2.x) && (this->y==arg2.x))
            return true;
        else
            return false;

    }

    void COwad::setIsDead()
    {

    }		

main.cpp

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>

#include "CBiedronka.h"
#include "COwad.h"
#include "CGra.h"

using namespace std;

int main()
{
     srand(time(NULL));
     CGra arek;
     arek.graj();

        return 0;
}    

Pozdrawiam i proszę o jak najszybszą pomoc.

1

A może tak spróbuj przeczytać te błędy. Braki średników możesz sam naprawić. Te błędy "not declared in this scope" oznaczają że zapomniałeś o include.

0

Sęk w tym, że średniki wydają się być na swoim miejscu, a nie wiem co więcej należy zaincludować dlatego proszę tutaj o pomoc.

0

Pomieszkałeś z include:
CGra.h

#ifndef CGRA_H
#define CGRA_H

class CBiedronka;

class CGra
{
private:
    CBiedronka *gracze[2];
    int licznik;
    void rysujPlansze();
public:
    CGra();
    void generujPodsumowanie();
    void graj();
    ~CGra();
};
 
#endif // CGRA_H 

CGra.cpp

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <ctime>
#include "CGra.h"
#include "CBiedonka.h"
...

Tyle wypatrzyłem ba szybkiego (więcej może być źle).

0

Wprowadziłem zmiany które poleciłeś mi MarekR22, dopisałem również #include "COwad.h" w CBiedronka.h, a więc plik CBiedronka.h wyglada teraz tak:

 
#ifndef CBIEDRONKA_H
#define CBIEDRONKA_H

#include "COwad.h"

class CBiedronka : public COwad
{
private:
    double energia;
public:
    CBiedronka();
    CBiedronka(int, int, double, bool);
   ~CBiedronka();
    double getE();
    void krok(int , bool);

};

#endif // CBIEDRONKA_H	

no i kompilator wywala mi jeden błąd brzmiący: 'expected class-name before '{' token' dotyczący właśnie tego pliku CBiedronka.h. Wygooglowałem to sobie ale niestety nie wiele mi to dało. Próbowałem zamienić includa "COwad.h" na class COwad; ale wtedy rodzą się nowe błędy. A więc pomocy!

0

Właściwie dodałem jeszcze w COwad.h #include "CBiedronka.h", szczerze mowiac nie wiem czy potrzebnie ale przed dodaniem pojawialy sie bledy ze COwad nie został zdeklarowany. Po dopisaniu pojawia się tylko jeden bład w poscie wyżej.

0

Masz dwa wyjścia:

  • albo dokładnie podawać w jakim miejscu występuje błąd i wklejać jego dokładną teść (preferowane)
  • albo wstawić tu zip-a, ze swoim projektem.

Obecnie nie wiadomo gdzie masz ten błąd aja nie mam zamiaru wkładać dodatkowego wysiłku by to ustalać, skoro tobie nie chce się podać takich podstawowych informacji.

0

Sorry wielkie za moja niedokładność. Na przyszłość postaram się zamieszać porządne odpowiedzi i posty. W załączniku znajduje się rar z projektem. Mam nadzieje, że będziesz mi w stanie pomóc rozwiązać mój problem.

0
  • zapętliłeś pliki nagłówkowe niepotrzebnie wpakowaałeś #include "CBiedronka.h" do COwad.h
  • w "CGra.cpp" używasz symbolu (tablicy) COowad, który jest niezdefiniowany - prawdopodobnie nie rozumiesz polimorfizmu
0

Program nareszcie się skompilował. Użyłem biblioteki vector tak jak miałem podane w wytycznych do zadania, usunąłem bibliotekę o której napisałeś i działa. Wielkie dzięki za pomoc.

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