Typy danych - proste programowanie obiektowe w C++.

0

Witam wszystkich.
W poniższych autonomicznych fragmentach kodu środowisko Code::Blocks wytknęło mi 2 błędy (zapisane w komentarzach jednoliniowych tam gdzie są zaznaczone).

main.cpp

 #include "klasy.h"

int main()//\main.cpp|3|error: two or more data types in declaration of 'main'|
{
    CKontrolny* pKontrolny = new CKontrolny;
    pKontrolny->ZainicjujGre();
    /*pKontrolny->GraLoop();*/
}

klasy.h

class CObiektMaterialny  //\klasy.h|18|error: new types may not be defined in a return type|
{
    public:
    float masa;
    float objetosc;
    short x;
    short y;
    short z;

    float PodajGestosc()
    {
        return masa/objetosc;
    }
}
struct SurowceGruntowe
{
    std::string nazwa;
    short zawartosc_procentowa;
    short warstwa;
}
class CGrunt : public CObiektMaterialny
{
    public:
    SurowceGruntowe ZawartoscGleby[32];
}

class CMapa
{
    public:
    CGrunt Topologia[256][256][32];
}
class CKontrolny
{
    public:
    void ZainicjujGre()
    {
        CMapa* Mapa = new CMapa;
        /*CGeneratorMapy* pGenerator = new CGeneratorMapy;
        pGenerator->WygenerujTeren();
        delete pGenerator;*/
    }
    /*void GraLoop()
    {
        CDisplay* pDisplay = new CDisplay;
        while(1)
        {
            pDisplay->BuforujTeren(1,1,1);
            pDisplay->WyplujBufor();
        }
    }*/
} 

Będę wdzięczny za objaśnienie problemu i pomocne rady jak się tych problemów pozbyć.

1
CKontrolny* pKontrolny = new CKontrolny;

brakuje () powinno byc

CKontrolny* pKontrolny = new CKontrolny();

no i po klasach/strukturach brakuje Ci ;

no i brakuje straznika (#pragma once)

0

Aktualny problem jest taki:

Klasa CKontrolny tworzy wskaźnik Mapa po czym tworzy instancję CGeneratorMapy.
CGeneratorMapy zaś, w sposób pośredni modyfikuje dane Mapa.

Jeżeli CKontrolny jest pierwsza w kodzie, krzyczy, żeCGeneratorMapy nie został zadeklarowany, w drugim przypadku narzeka że Mapa jeszcze nie istnieje.

Kod:

class CKontrolny
{
    public:
    void ZainicjujGre() const
    {
        CMapa* Mapa = new CMapa;
        CGeneratorMapy* pGenerator = new CGeneratorMapy;
        pGenerator->WygenerujTeren();
        delete pGenerator;
    }
    void GraLoop() const
    {
        CDisplay* pDisplay = new CDisplay;
        while(1)
        {
            pDisplay->BuforujTeren(1,1,1);
            pDisplay->WyplujBufor();
        }
    }
}; 
class CGeneratorMapy
{
    public:
    void WygenerujTeren() const
    {
        CGeneratorTerenu* pGenerator = new CGeneratorTerenu;
        pGenerator->WypelnijPowietrzem();
        pGenerator->WypelnijCustomem("ZIEMIA",100,0,0);
        pGenerator->WypelnijCustomem("ZIEMIA",100,0,1);
        delete pGenerator;
    }
    void PosypRoslinami() const
    {
        CGeneratorFlory* pGenerator = new CGeneratorFlory;
    }
    void PosypZwierzetami() const
    {
        CGeneratorFauny* pGenerator = new CGeneratorFauny;
    }
};
 
 class CMapa
{
    public:
    CGrunt Topologia[256][256][32];
};
class CGeneratorTerenu
{
    public:
    void WypelnijPowietrzem() const
    {
        for(int i=0;i<256;i++)
        {
            for(int j=0;j<256;j++)
            {
                for(int k=0;k<32;k++)
                {
                    Mapa->Topologia[i][j][k].ZawartoscGleby[0]={"POWIETRZE_ATMOSFERYCZNE", 100, 0};
                }
            }
        }
    }
    void WypelnijCustomem(string skladnik, short stezenie, short warstwa, short pz) const
    {
        for(int i=0;i<256;i++)
        {
            for(int j=0;j<256;j++)
            {
                Mapa->Topologia[i][j][pz].ZawartoscGleby[warstwa]={skladnik, stezenie, warstwa};
            }
        }
    }
};
class CGeneratorFlory
{

};

Jak wyjść z takiego impasu?
To powinno tak być, że kompilator nie widzi kodu który wydarzy się dopiero za chwilę?

0

Poszukaj pod hasłem: forward declaration

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