ADT List in einer ADT_List usw.
-
Hallöchen,
ich möchte am Ende einen World_Enry in einer Adt_Liste (Einträge) in einer Adt_Liste (Z) in einer Adt_Liste(Y) in einer Adt_Liste (X) in einer Adt_Liste (Welt) stecken. Nun, dies funktioniert nicht , da das Template wohl nicht funtioniert (s. Compiler-Fehler). Es folgt nun der Quellcode (gekürzt) - gäbe es eigentlich eine andere Methode der Implementation (z.B. mit universellen Templates)?
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /* * File: main.cpp * Author: Simon * * Created on 13. September 2016, 20:51 */ #include <iostream> #include <string> #include <time.h> #include <GL/glu.h> #include <SDL2/SDL.h> #include <SDL2/SDL_opengl.h> #include <ctime> #include <math.h> using namespace std; void CORE_LOG_Msg(int Level, string Msg, int Number = 0) { int CORE_log_level = 3; // 0 = DISABLED, 1 = Only errors (default), 2 = errors and warnings, 3 = errors, warnings and useless information if (Level <= CORE_log_level) { if (Level == 2) { Msg = "WARNING: " + Msg; } if (Level == 1) { Msg = "ERROR: " + Msg; } if (Level == 1) { if (Number == 0) { cerr << Msg << endl; } else { cerr << Msg << Number << endl; } } else { if (Number == 0) { cout << Msg << endl; } else { cout << Msg << Number << endl; } } } Msg = ""; Number = 0; } template <typename Datatype> class ADT_List { public: struct Entry { Datatype content; //Content to save int ID; Entry *next; //Pointer to next entry Entry() { this->next = NULL; this->ID = -1; CORE_LOG_Msg(3,"A new ADT_List Entry has been created."); } }; Entry Anf; //Create startentry Entry *Pos; //Create active position ADT_List() { //Constructor for List //Anf = new Entry(); //Create startentry this->Pos = &this->Anf; //Set active position to the first entry this->Anf.next = NULL; //Set next entry to NOT defined CORE_LOG_Msg(3,"A new ADT_List has been created."); } bool isEmpty() { if (this->Anf.next == NULL) { //Is the "first" entry empty? return true; } else { return false; } } void gotofirst() { this->Pos = &this->Anf; //Set active position to the start } void gotonext() { if(!this->isLast()) { this->Pos = this->Pos->next; //Set active position to the next } else { CORE_LOG_Msg(1,"Error. This is already the last entry."); } } void insert(Datatype x) { Entry *newEntry = new Entry(); //Prepare new entry newEntry->content = x; //Insert content for new entry newEntry->next = this->Pos->next; //Set next pointer of the new entry to the next entry of the active position this->Pos->next = newEntry; //Insert the new entry now } void insertID(Datatype x,int ID) { Entry *newEntry = new Entry(); //Prepare new entry newEntry->ID = ID; //Insert the wished ID newEntry->content = x; //Insert content for new entry newEntry->next = this->Pos->next; //Set next pointer of the new entry to the next entry of the active position this->Pos->next = newEntry; //Insert the new entry now } bool isLast(){ return (this->Pos->next == NULL); } Datatype getcontent(){ return this->Pos->next->content; } int getID(){ if(this->Pos->next->ID != -1) { return this->Pos->next->ID; }else { CORE_LOG_Msg(1,"Error. The ID is NULL."); return 0; } } void print() { cout << "Content of the ADT list:" << endl; while(!this->isLast()) { cout << "Entry: " << &this->Pos->next; cout << " ID: " << this->Pos->next->ID; cout << " Next is: " << this->Pos->next << endl; gotonext(); } this->gotofirst(); cout << "End." << endl; } bool select(int ID) { CORE_LOG_Msg(3,"Selecting..."); while(!this->isLast()) { CORE_LOG_Msg(3,"Checking..."); if(this->getID() == ID) { return true; } else { this->gotonext(); } } return false; } }; class World_Entry { /* INSERT HERE ATTRIBUTES: ID(^=List with structure data), MATERIAL; * FUNCTIONS TO CALL IF EVENT XY HAPPENS (created, died, damaged etc.) */ }; class World_Matrix { public: /* Templates for the dimensions: * ADT_List(World)<ADT_List(X-Axis)<ADT_List(Y-Axis)<ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > > > > *World = new ADT_List<ADT_List(X-Axis)<ADT_List(Y-Axis)<ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > > > >(); * ADT_List(X-Axis)<ADT_List(Y-Axis)<ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > > > *X_Axis = new ADT_List<ADT_List(Y-Axis)<ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > > >(); * ADT_List(Y-Axis)<ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > > *Y_Axis = new ADT_List<ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > >(); * ADT_List(Z-Axis)<ADT_List(Blocks)<World_Entry> > *Z_Axis = new ADT_List<ADT_List(Blocks)<World_Entry> >(); * ADT_List(Blocks)<World_Entry> *World_Entries = new ADT_List<ADT_List<World_Entry> >(); */ ADT_List<ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > > > *World = new ADT_List<ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > > >(); //ADT_List<int> *X_Axis = new ADT_List <int>(); World_Matrix() { CORE_LOG_Msg(3,"Created World matrix..."); } SetBlockAt(int x, int y, int z, int ID) { CORE_LOG_Msg(3, "Trying to add a WORLD_Entry."); if(this->World->select(x)) { CORE_LOG_Msg(3,"Found the X-Axis-Entry."); } else { CORE_LOG_Msg(3,"No matching X-Axis-Entry found. Create one..."); ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > > *X_Axis = new ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > >(); this->World->insertID(X_Axis, x); } } }; int main(int argc, char **argv) { CORE_LOG_Msg(3, "---- Program start now. ----"); //Create World-Matrix CORE_LOG_Msg(3, "Initiate world matrix: WORLD"); World_Matrix *WORLD = new World_Matrix(); //WORLD->X_Axis->print(); WORLD->SetBlockAt(0,0,0,0); [code] CORE_LOG_Msg(3, "---- Program have ended. ----"); return 0; }
Kompiler ausgabe:
cd 'H:\OWNCLOUD\Entwicklung\NetBeansProjects\Spiel' H:\OWNCLOUD\MinGW\msys\1.0\bin\make.exe -f Makefile CONF=Debug "/H/OWNCLOUD/MinGW/msys/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf make.exe[1]: Entering directory `/h/OWNCLOUD/Entwicklung/NetBeansProjects/Spiel' "/H/OWNCLOUD/MinGW/msys/1.0/bin/make.exe" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/spiel.exe make.exe[2]: Entering directory `/h/OWNCLOUD/Entwicklung/NetBeansProjects/Spiel' mkdir -p build/Debug/MinGW-Windows rm -f "build/Debug/MinGW-Windows/main.o.d" g++ -c -g -std=c++14 -MMD -MP -MF "build/Debug/MinGW-Windows/main.o.d" -o build/Debug/MinGW-Windows/main.o main.cpp main.cpp: In member function 'int World_Matrix::SetBlockAt(int, int, int, int)': main.cpp:185:44: error: no matching function for call to 'ADT_List<ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > > >::insertID(ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > >*&, int&)' this->World->insertID(X_Axis, x); ^ main.cpp:104:10: note: candidate: void ADT_List<Datatype>::insertID(Datatype, int) [with Datatype = ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > >] void insertID(Datatype x,int ID) { ^ main.cpp:104:10: note: no known conversion for argument 1 from 'ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > >*' to 'ADT_List<ADT_List<ADT_List<ADT_List<World_Entry> > > >' make.exe[2]: *** [build/Debug/MinGW-Windows/main.o] Error 1 make.exe[2]: Leaving directory `/h/OWNCLOUD/Entwicklung/NetBeansProjects/Spiel' make.exe[1]: *** [.build-conf] Error 2 make.exe[1]: Leaving directory `/h/OWNCLOUD/Entwicklung/NetBeansProjects/Spiel' make.exe": *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 46s)
-
void insertID(Datatype x,int ID)
Ich sehe da keinen Pointer