Hilfe^^



  • Danke werde es gleich mal ausprobieren



  • hat wenig geholfen



  • Woran haperts denn?
    Versuch mal das Problem genauer zu beschreiben.



  • Ich mach Dir mal n komplettes beispiel:

    Ohne Klasse

    #ifndef DATA_HPP
    #define DATA_HPP
    
    void my_function ();
    
    #endif
    

    Mit Klasse

    // classes
    #include "class1.hpp"
    #include "class2.hpp"
    
    #ifndef DATA_HPP
    #define DATA_HPP
    
    void my_function (class1 a, class2 b);
    
    #endif
    


  • Also gut... Hier nochmal die überarbeitete .cpp und .h dateien:

    Leveleditor.h

    //*********************                  Level.h            ****************************//
    //  This class manages the 2D Levels of the Engine                                      //
    //**************************************************************************************//
    
    //Include files
    #include <iostream>
    #include <fstream>
    #ifndef LEVELEDITOR_H
    #define LEVELEDITOR_H
    Anzeigen
    
    #include <vector>
    
    //Saves the stuff
    struct LevelData
    {
        unsigned int iMapID;
        unsigned int iWidth;
        unsigned int iHeight;
    };
    
    //Saves the informations if its a teleport field
    struct TeleportField
    {
        int iMapID;
        int iTargetWidth;
        int iTargetHeight;
        int iTeleporttype;
    };
    
    //Saves the field informations
    struct MapField
    {
        char* strBitmapName;
        TeleportField Teleport;
    };
    
    //This class manages the 2D Levels
    class Level
    {
        public:
    
            //Initialize the class
            void Init(LevelData *pLevelData)
            {
                this->Init(pLevelData,"",0,0);
            }
    
            //Initialize the class
            void Init(LevelData *pLevelData,std::string strStandardFilename,int iWidth, int iHeight)
            {
                m_pLevelDatas = pLevelData;
    
                m_pLevelDatas->iWidth    = iWidth;
                m_pLevelDatas->iHeight    = iHeight;
    
                if(iWidth && iHeight)
                    this->MakeNewMap(iWidth,iHeight,strStandardFilename);
            }
    
            void SetSizeOfMap(int iWidth, int iHeight)
            {
            }
    
            //Makes a new map (deletes all old datas)
            void MakeNewMap(int iWidth, int iHeight,std::string strStandardFilename)
            {
                m_pLevelDatas->iWidth    = iWidth;
                m_pLevelDatas->iHeight    = iHeight;
    
                //Clears it if there is already a version
                if(!m_bMap)
                    m_bMap = true;
                else
                {
                    //Resize it an sets it 0
                    for(int i = 0;i < m_pLevelDatas->iWidth;i++)
                        m_MapField[i].clear();
    
                    m_MapField.clear();
                }
    
                //Creats iWidth elements
                m_MapField.resize(m_pLevelDatas->iWidth);
    
                //Creates for each iWidth element iHeight elements
                for(int i = 0;i < m_pLevelDatas->iWidth;i++)
                {
                    m_MapField[i].resize(m_pLevelDatas->iHeight);
    
                    for(int z = 0;z < m_pLevelDatas->iHeight;z++)
                    {
                        //Sets it 0/pStandardFilename
                              m_MapField[i][z].strBitmapName        = (char*)strStandardFilename;
                        m_MapField[i][z].Teleport.iMapID    = 0;
                    }    
                }
            }
    
            //Returns the Field
            MapField* GetField(int iX, int iY)
            {
                if ((iX > m_pLevelDatas->iWidth) || (iY > m_pLevelDatas->iHeight))
                {
                    std::cout << "Error, field doesn't exist." << std::endl;            
                }
    
                return &m_MapField[iX-1][iY-1];
            }
    
            //Gives the map out, only for test (DOS)
            void GiveMapOut()
            {
                for(int i = 0;i < m_pLevelDatas->iHeight;i++)
                {
                    for(int z = 0;z < m_pLevelDatas->iWidth;z++)
                    {
                        std::cout << m_MapField[z][i].pBitmapName << " ";
                    }
    
                    std::cout << std::endl;
                }
            }
    
            //Saves the level
            int SaveLvl(std::string strFilename)
            {
                if(!m_bMap)
                    return 1;
    
                std::ofstream ofStream; 
    
                //Opens the file binary
                ofStream.open(strFilename.c_str(),std::fstream::out | std::fstream::binary); 
    
                //Writes the LevelData
                ofStream.write((char*)m_pLevelDatas, sizeof(*m_pLevelDatas));
    
                for(int z = 0;z < m_pLevelDatas->iWidth;z++)    
                    for(int i = 0;i < m_pLevelDatas->iHeight;i++)
                        ofStream.write((char*)&m_MapField[z][i], sizeof(m_MapField[z][i]));
    
                //Close the file 
                ofStream.close();
    
                return 0;
            }
    
            //Loads the level
            void LoadLvl(std::string strFilename)
            {
                std::ifstream ifStream; 
    
                //Opens the file binary
                ifStream.open(strFilename.c_str(),std::fstream::in | std::fstream::binary); 
    
                //Reads it
                ifStream.read((char*)m_pLevelDatas,sizeof(*m_pLevelDatas));
    
                this->MakeNewMap(m_pLevelDatas->iWidth, m_pLevelDatas->iHeight, "");
    
                for(int z = 0;z < m_pLevelDatas->iWidth;z++)    
                    for(int i = 0;i < m_pLevelDatas->iHeight;i++)
                        ifStream.read((char*)&m_MapField[z][i],sizeof(m_MapField[z][i]));
    
                //Close the file 
                ifStream.close();
            }
    
        private:
    
                //If the map exist
                bool m_bMap;
    
                //The map
                std::vector < std::vector <MapField> > m_MapField;
    
                //This struct saves the header of the file
                LevelData *m_pLevelDatas;
    
        #endif
    };
    

    Leveleditor.cpp

    //******************************* FOR MORE SEE THE .h file ********************************//
    
    #include <iostream>
    
    #include <cstdio>
    
    #include "Leveleditor.h"
    
    #include "Leveleditor X,Y Achsen.cpp"
    
    Level Lvl;
    
    using namespace std;
    
    int main()
    {
        LevelInfo.iMapID = 36;
    
        Lvl.Init(&LevelInfo,"Test.jpg",5,4);
    
        Lvl.GetField(1,1)->pBitmapName = "sdf.png";
        Lvl.GetField(3,4)->pBitmapName = "sdf.png";
    
        Lvl.SetSizeOfMap(1,1);
    
        Lvl.GiveMapOut();
    
        Lvl.SaveLvl("test.drg");
    
        Lvl.LoadLvl("test.drg");
    
        cout << "ende" << endl;
        cout.flush();
        getchar();
    
        return 0;
    }
    

    Leveleditor X,Y Achsen.cpp

    #include <Leveleditor.h>
    #include <Leveleditor.cpp>
    
    //Geht alle Felder durch
    for(int iHeight = 0;iHeight < LevelInfo.iHeight;iHeight++)
    {
        for(int iWidth = 0;iWidth < LevelInfo.iWidth;iWidth++)
        {
            //Zeichnet das Sprite (pBitmapName)
    
            //Wenn das Sprite nicht ausserhalb des Bildschirms ist (60 ober und links vom Bildschirm, und über den unteren und rechten Teil des Bildschirms
            if(((x+ScrollX> -60) && (x+ScrollX < MeineXAuslösung) && ((y+ScrollY > -60) && (y+ScrollY < MeineXAuflösung))))
                MeineDrawFunktion(Lvl.GetField(x,y)->pBitmapName,x+ScrollX,y+ScrollY);
    
            //Sprite ist 50 Breit
            x += 50;
        }
    
        //Sprite ist 50 hoch
        y += 50;
    }
    


  • Nach kurzem Überfliegen:

    Was ist LevelInfo? Ich sehe keine Definition.
    Du bindest die beiden Quellcodedateien im Kreis ein. A.cpp bindet B.cpp ein und B.cpp bindet A.cpp ein. Wozu?

    Nachtrag:
    Deine eigenen Includedateien müssen in Anführungsstriche gesetzt werden (Leveleditor X,Y Achsen.cpp).
    Der letzte Abschnitt, gehört er zu einer Methode? Wenn ja, wo ist sie?
    Deine Klasse MapField hat keinen Member pBitmapName.
    Das #endif vom Includeguard muss komplett nach hinten. Bei dir hängt da noch eine geschweifte Klammer dahinter (von der Klasse!).

    Generell:
    In Headerdateien kommen nur die Member und die Schnittstellendefinitionen der Methoden rein, sonst verlieren sie ihren Sinn. Die Implementierung kommt dann in die eigentliche Quelldatei.

    Also:

    //Beispiel example.h
    #ifndef EXAMPLE_H
    #define EXAMPLE_H
    
    class Bla
    {
    private:
      int blubb;
    
    public:
      Bla();
      Bla(int);
    
      int GetBla();
      void PrintBla();
    
    };
    
    #endif
    
    //Beispiel example.cpp
    #include <iostream>
    
    #include "example.cpp"
    
    using namespace std;
    
    Bla::Bla()
    {
      blubb = 0;
    }
    
    Bla::Bla(int i)
    {
      blubb = i;
    }
    
    int Bla::GetBla()
    {
      return blubb;
    }
    
    void Bla::PrintBla()
    {
      cout << "blubb ist " << blubb << endl;
    }
    
    int main()
    {
      Bla b;
      int i = b.GetBla();
      b.PrintBla();
    }
    

    Ungefähr so 😉



  • Danke.... Aber das mit A und B versteh ich nicht.... meine .cpp datei bindet meinen header ein.... und nicht umgekehrt...
    Beim überfliegen siehst du es wohl nicht aber meine #include dateien sind in anführungsstrichen....
    Wenn jemand Lust hat kann er sich entweder die dateien kopieren oder sie auf meiner seite downloaden um selbst ein bisschen rumzubasteln:
    http://freemmorpgforfun.npage.de/



  • #include <Leveleditor.h>
    #include <Leveleditor.cpp>
    

    Anführungszeichen? Ich hab grad in die Dateien auf der Webseite reingeschaut, da stehts auch genauso. Und das Wort "Anzeigen" in der Headerdatei mag der Compiler mit Sicherheit auch nicht - übrigens genauso wie die "lose" for-Schleife :xmas1: Die Fehler, die danach kommen könnt ihr dann nach und nach bearbeiten.

    Mit A und B meinte ich, daß "Leveleditor X,Y Achsen.cpp" "Leveleditor.cpp" inkludiert und "Leveleditor.cpp" "Leveleditor X,Y Achsen.cpp" inkludiert.



  • Oh Danke... Entschuldige meine vorschnelle Reaktion.
    Achso und Frohe Wheinachten UND Frohes Neues (nachträglich)
    vieleicht könnte uns ja jemand helfen indem er wie ich ja schon geschrieben habe, sich die dateien runterlädt odre sie sich von hier kopiert...
    Dann kann er mir sein Ergebnis schicken per PN, per Skype (freemmorpgforfun) oder auch per e-mail (nicopiel1@web.de)^^

    So jetzt wieder zum Thema:

    1. Anführungszeichen korriegiert.

    2. Jetzt inkludiert die "Leveleditor X,Y Achsen.cpp" nicht mehr die "Leveleditor.cpp".

    3. Ich werde die neuen Dateien mal Uploaden.

    4. *Nachtrag: Die Dats sind upgeloaded



  • Achso und das mit den Anführungszeichen stimmt nicht.... Man muss die in die "Krokodilklammern" (<...>) setzen^^


Anmelden zum Antworten