Qt creator - błedy przy kompilacji

Qt creator - błedy przy kompilacji
U8
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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

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

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

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

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

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

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

Kopiuj
#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.

edytowany 2x, ostatnio: urs_882
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.

U8
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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.

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
0

Pomieszkałeś z include:
CGra.h

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

Kopiuj
#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).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
U8
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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:

Kopiuj
 
#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!

U8
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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.

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
U8
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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.

  • gra.rar (5 KB) - ściągnięć: 86
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:5 minut
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

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
U8
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.