Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 26.11.2002, 16:44 Titel: Problem mit der Vererbung |
|
|
also ich krieg immer folgenden fehler:
Zitat: | (6) : error C2011: 'Sprite' : 'class' type redefinition
(25) : error C2556: 'int __thiscall Sonic::Left(void)' : overloaded function differs only by return type from 'void __thiscall Sonic::Left(void)'
(13) : see declaration of 'Left'
(25) : error C2371: 'Left' : redefinition; different basic types
(13) : see declaration of 'Left' |
ich hab die Sprite Class wie im Buch und dann hab ich halt
ne andere class gemacht und
Code: |
class blabla :: public Sprite
{
}
|
wo is der fehler, was mach ich falsch ? _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
MAG Mini JLI'ler
Anmeldedatum: 21.11.2002 Beiträge: 15 Wohnort: Falkenrehde/Brandenburg/Deutschland Medaillen: Keine
|
Verfasst am: 26.11.2002, 17:17 Titel: |
|
|
Hm,ich habe jetzt zwar den Buchcode nicht,aber...
Vieleicht liegt das Problem nicht bei der Veerbung.
Eventuell hast du versucht einige Funktion der Klasse Sprite zu überschreiben?Wenn ja, sollten diese in der Klasse Sprite virtuell sein.
Aber ich weiß jetzt nicht so genau wo der Fehler noch liegen könnte.
Könntest du mal den ganzen Code posten? |
|
Nach oben |
|
|
Darkevel Mini JLI'ler
Anmeldedatum: 11.11.2002 Beiträge: 10
Medaillen: Keine
|
Verfasst am: 26.11.2002, 17:23 Titel: Mehrfachdeklaration |
|
|
Kann es sein das du deine Klasse untereinander einbindest und anschliesend beide Dateien in die ausführende cpp Datei einbindest?
Versuch mal beide Klasse hiermit vor Mehrfachdeklaration zu schützen:
Code: |
#ifndef class_name
#define class_name
//hier der Klasse Code
#endif
|
|
|
Nach oben |
|
|
MAG Mini JLI'ler
Anmeldedatum: 21.11.2002 Beiträge: 15 Wohnort: Falkenrehde/Brandenburg/Deutschland Medaillen: Keine
|
Verfasst am: 26.11.2002, 17:23 Titel: |
|
|
Achja, anscheinend liegt der Fehler in der Deklaration von Left().
Steht ja auch in der Fehlermeldung.Also ich denke mal das du vielleicht die Methode Left() welche schon in der Klasse Sprite vorhanden ist neudefiniert.Oder, falls du die Methode normaler Weise ausserhalb der Klassendefinition deklarierst, du hast in der Funktionsdeklaration eine andere Parameterliste verwendet oder sowas Ähnliches.
Zum Beispiel:
class Gegner : public Sprite
{
void Left(void);
};
void Gegner::Left(int distance)
{
// deklaration
}
Könnte das sein?Ich kann nur raten! |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 26.11.2002, 20:18 Titel: |
|
|
das letze war richtig MAg, nun sind die fehler weg
aber ich hab immer noch folgenden:
Zitat: | sprite.h(6) : error C2011: 'Sprite' : 'class' type redefinition |
_________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
DaN00b JLI'ler
Anmeldedatum: 10.08.2002 Beiträge: 159
Medaillen: Keine
|
Verfasst am: 26.11.2002, 21:22 Titel: |
|
|
bei vererbung nur ein :
mag hat das ja schon richtig geschrieben aber bei dir scheinen immer noch zwei :: zu sein _________________ Carpe Diem - Seize the day - Nütze den Tag! |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 27.11.2002, 12:31 Titel: |
|
|
ne is nur ein ":"
Code: | class Sonic : public Sprite
{ |
help _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
Jörg JLI MVP
Anmeldedatum: 19.07.2002 Beiträge: 182 Wohnort: Siegen/NRW Medaillen: Keine
|
Verfasst am: 27.11.2002, 13:34 Titel: |
|
|
Es scheint so, als hättest du Sprite in Zeile 6 neu definiert, und zwar nicht als class sondern irgendwas anderes (das meint zumindest die MSDN zum Fehler C2011).
Zeig' doch mal den Code in Zeile 6. _________________ www.messiahzone.de.vu |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 27.11.2002, 13:43 Titel: |
|
|
Code: | // Klasse für Sprites
class Sprite
{
public:
Sprite();
|
Code: | class Sonic : public Sprite
{
public:
Sonic();
|
könnte es daran liegen das ich in der "Sonic.h" die Sprite.h includiere, aber ich brauch die doch damit ich zugriff zur Sprite.h hab oder? _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 27.11.2002, 15:03 Titel: |
|
|
Hast du vielleicht in der Sprite.h die #ifndef,#define und #endif vergessen? (steht oben wie das geht) |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 27.11.2002, 15:59 Titel: |
|
|
dann krieg ich 425 fehler _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
MAG Mini JLI'ler
Anmeldedatum: 21.11.2002 Beiträge: 15 Wohnort: Falkenrehde/Brandenburg/Deutschland Medaillen: Keine
|
Verfasst am: 27.11.2002, 16:19 Titel: |
|
|
Hm, also das kann ich mir wirklich nicht erkären.Wie gesagt,dazu müsste ich den gesamten Code sehen.Vielleicht kannst du ihn mir per eMail schicken?
(mag@gap-project.net) |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 27.11.2002, 16:42 Titel: |
|
|
semikolon vergessen?
und was für fehler kommen wenn du #define.. in der sprite.h machst? |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 27.11.2002, 18:43 Titel: |
|
|
nun gehts mit
Code: |
#ifndef class_name
#define class_name
//hier der Klasse Code
#endif
|
im Buch stehen dazu keine Erklärungen...
was macht #ifndef ? und define müste doch eigendlich so immer sein oder?
#define AUFLOESUNG 1024
z.b _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 27.11.2002, 22:29 Titel: |
|
|
#ifdef Überprüft, ob eine Konstante gesetzt ist, egal mit welchem Wert.
#ifndef Überprüft, ob eine Konstante nicht gesetzt ist.
#define Setzt eine Konstante. Wenn Kein Wrt angegeben wird, wird der Wert 1 angenommen.
#undef löscht eine gesetzte Konstante.
Damit lassen sich bedingte Kompilierungen erreichen.
Angenommen, du Schreibst ein Programm, das für Windows und für Linux Kompiliert werden soll. Nicht alle Programmteile lassen sich in Beiden Betriebssystemen verwenden, also schreibt man z.B.
#ifdef WINDOWS
// Windowsspeziefischer Code
#elif LINUX
// Linuxspeziefischer Code
#else
// Code für andere BS
#endif
Verstanden?
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|