- Registriert
- Dez. 2003
- Beiträge
- 1.371
Sorry dass ich so lange nicht geantwortet habe aber ich hatte leider kaum Zeit. Werde mir jetzt erstmal wieder mehr Zeit dafür nehmen
Schon fast 2 Wochen vergangen. Wie schnell doch die Zeit vergeht.
Das einzige was ich nicht weiß was es damit auf sich hat sind die virtuellen Methoden. Templates benutzt ich nie weil ich nicht genau weiß wofür. Polymorphie kenn ich natürlich.
Hab das jetzt mal versucht in meinen Code zu integrieren aber irgendwie mach ich da was falsch
Also hier noch mal der Code. Die karte.h hab ich mir jetzt mal gespart weil sie 1. hier nicht wichtig ist und 2. sich nicht geändert hat
Tut mir leid dass ich hier so riesen Code-brocken poste aber ich weiß nicht wie ich sonst den Fehler ausmerzen kann außer euch zu fragen.
Die Fehlermeldung:
--------------------Konfiguration: maps - Win32 Release--------------------
Kompilierung läuft...
main.cpp
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(48) : error C2555: 'MethCall<T>::clone' : Neue Version der virtuellen Funktion unterscheidet sich von 'CallBase::clone' nur hinsichtlich des Ergebnistyps oder der Aufrufkonvention
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(6) : Siehe Deklaration von 'CallBase'
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(54) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'MethCall<T>'
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(82) : error C2675: Unaerer Operator '!' : 'class CallHolder' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(85) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CallHolder' akzeptiert (oder keine geeignete Konvertierung moeglich)
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(140) : error C2785: 'class CallHolder __cdecl make_call(T *,void (__thiscall T::*)(struct SParameters &))' und '<unbekannt>' haben verschiedene Rueckgabetypen
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(57) : Siehe Deklaration von 'make_call'
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(141) : error C2785: 'class CallHolder __cdecl make_call(T *,void (__thiscall T::*)(struct SParameters &))' und '<unbekannt>' haben verschiedene Rueckgabetypen
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(57) : Siehe Deklaration von 'make_call'
Fehler beim Ausführen von cl.exe.
maps.exe - 5 Fehler, 0 Warnung(en)
Ich hoffe ihr könnt mir mal wieder helfen. Währe euch sehr dankbar. Hoffentlich hat es sich dann damit getan
Hätte nicht gedacht dass das ganze sich so hinzieht.

Das einzige was ich nicht weiß was es damit auf sich hat sind die virtuellen Methoden. Templates benutzt ich nie weil ich nicht genau weiß wofür. Polymorphie kenn ich natürlich.
Hab das jetzt mal versucht in meinen Code zu integrieren aber irgendwie mach ich da was falsch

Also hier noch mal der Code. Die karte.h hab ich mir jetzt mal gespart weil sie 1. hier nicht wichtig ist und 2. sich nicht geändert hat

Code:
//Claden.h
include <memory>
struct SParameters;
class CallBase
{
public:
virtual void operator()( SParameters&) const = 0;
virtual CallBase* clone() const = 0;
virtual ~CallBase() throw() {}
};
class CallHolder
{
public:
CallHolder() {}
explicit CallHolder( std::auto_ptr<CallBase> call) : _call( call) {}
CallHolder( const CallHolder& other) : _call( other._call->clone())
{
}
CallHolder& operator=( const CallHolder& other)
{
CallHolder tmp( other);
_call = tmp._call;
return (*this);
}
void operator()( SParameters& params) const
{
(*_call)( params);
}
private:
std::auto_ptr<CallBase> _call;
};
template <class T>
class MethCall: public CallBase
{
public:
typedef T* ObjectPtr;
typedef void( T::* Method)( SParameters&);
MethCall( ObjectPtr o, Method m) : _o(o), _m(m) {}
virtual void operator() ( SParameters& params) const
{
(_o->*_m)( params);
}
virtual MethCall* clone() const
{
return new MethCall( _o, _m);
}
private:
ObjectPtr _o;
Method _m;
};
template <class T>
CallHolder make_call( T* o, void( T::* m)( SParameters&))
{
return CallHolder( std::auto_ptr<CallBase>( new MethCall<T>( o, m)));
}
//laden.h
#ifndef _datei_
#define _datei
#include <StdIO.h>
#include <IO.h>
#include <FCntl.h>
#include <iostream>
#include <string>
#include <fstream>
#include <Claden.h>
#include <karte.h>
using namespace std;
/*DWORD GetFileSize(char* pcFilename)
{
DWORD dwSize;
int iFile = open(pcFilename, O_BINARY | O_RDONLY);
dwSize = filelength(iFile);
close(iFile);
return dwSize;
}*/
struct SCommand
{
char acName[256];
void (* pFunction)(SParameters&);
};
class Claden
{
private:
char* m_pcScript;
int m_iScriptSize;
SCommand m_aCommand[1024];
int m_iNumCommands;
public:
Claden(char* filename);
~Claden();
void AddCommand(char* pcName, CallHolder pFunction);
SCommand* FindCommand(char* pcName);
inline char* GetScript() {return m_pcScript;}
inline int GetScriptSize(){return m_iScriptSize;}
};
Claden::Claden(char* filename) : m_pcScript(NULL), m_iScriptSize(0), m_iNumCommands(0)
{
if(filename == NULL) return;
FILE* pFile = fopen(filename, "rb");
if(pFile != NULL)
{
DWORD dwFileSize = GetFileSize(pFile,NULL/*Ka was das hier soll*/);
m_pcScript=new char[dwFileSize];
ZeroMemory(m_pcScript, dwFileSize);
fread(m_pcScript, 1, dwFileSize, pFile);
fclose(pFile);
m_iScriptSize = (int)(dwFileSize);
}
}
Claden::~Claden()
{
delete m_pcScript;
}
void Claden::AddCommand(char* pcName, CallHolder pFunction)
{
if(!pcName || !pFunction || m_iNumCommands >= 1024) return;
strcpy(m_aCommand[m_iNumCommands].acName, pcName);
m_aCommand[m_iNumCommands].pFunction = pFunction;
m_iNumCommands++;
}
SCommand* Claden::FindCommand(char* pcName)
{
if(!pcName) return NULL;
for(int i=0; i<m_iNumCommands; i++)
{
if(!strcmp(pcName, m_aCommand[i].acName))
{
return &m_aCommand[i];
}
}
return NULL;
}
class Datei
{
private:
std::string m_dateiname;
std::string m_levelname;
int m_NumCommands;
public:
inline Datei();
int dread(char* fileName, Karte& karte);
name(SParameters &p);
SetField(SParameters &p);
// Die Script Funktionen
};
inline Datei::Datei()
{
m_NumCommands=1;
};
int Datei::dread(char* fileName, Karte& karte)
{
cout<<"Beginn der dread Methode"<<endl;
Claden script(fileName);
cout<<"Script Datei konnte erstellt werden !"<<endl;
script.AddCommand("name", make_call( this, &Datei::name));
script.AddCommand("SetField", make_call( this, &Datei::SetField));
cout<<"Script SetField konnte erstellt werden !"<<endl;
for(int i = 0; i <m_NumCommands;i++)
{
cout<<"Schleifendurchlauf Nr. "<<i<<endl;
}
cout<<"Ende der dread Methode"<<endl;
return 1;
}
#endif
Tut mir leid dass ich hier so riesen Code-brocken poste aber ich weiß nicht wie ich sonst den Fehler ausmerzen kann außer euch zu fragen.
Die Fehlermeldung:
--------------------Konfiguration: maps - Win32 Release--------------------
Kompilierung läuft...
main.cpp
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(48) : error C2555: 'MethCall<T>::clone' : Neue Version der virtuellen Funktion unterscheidet sich von 'CallBase::clone' nur hinsichtlich des Ergebnistyps oder der Aufrufkonvention
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(6) : Siehe Deklaration von 'CallBase'
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(54) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'MethCall<T>'
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(82) : error C2675: Unaerer Operator '!' : 'class CallHolder' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator geeigneten Typ nicht
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(85) : error C2679: Binaerer Operator '=' : Kein Operator definiert, der einen rechtsseitigen Operator vom Typ 'class CallHolder' akzeptiert (oder keine geeignete Konvertierung moeglich)
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(140) : error C2785: 'class CallHolder __cdecl make_call(T *,void (__thiscall T::*)(struct SParameters &))' und '<unbekannt>' haben verschiedene Rueckgabetypen
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(57) : Siehe Deklaration von 'make_call'
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\laden.h(141) : error C2785: 'class CallHolder __cdecl make_call(T *,void (__thiscall T::*)(struct SParameters &))' und '<unbekannt>' haben verschiedene Rueckgabetypen
D:\SPIELE PROGGEN\TEST\DATEIEN\MAPS\Claden.h(57) : Siehe Deklaration von 'make_call'
Fehler beim Ausführen von cl.exe.
maps.exe - 5 Fehler, 0 Warnung(en)
Ich hoffe ihr könnt mir mal wieder helfen. Währe euch sehr dankbar. Hoffentlich hat es sich dann damit getan
