Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
16.03.2002, 22:13
Darkman|two



nAbend also ich schreib grad son kleines Progrämmchen wo es eine Klasse geben soll mit mit den Methoden schlagen und wegrennen und dann noch Name eingeben und dann noch zwei Variabeln wo ich dann den Namen drin Speicher und eine wo die Healthanzeige ist. So jetzt will ich in der Main Funktion dann Klasse Spieler und Klasse Gegner machen dann hab ich ja das einmal für den spieler und eine für den gegner nur wenn ich jetzt in der Methode schlage der Gegnerischen Klasse schaden zufügen will. Wie muss ich das machen??

--

zum Seitenanfang zum Seitenende Profil || Suche
001
16.03.2002, 22:37
KillerDoc



Mach halt noch eine Methode GetHurt in der Klasse.

Dann kannst du das zb so machen:

Player.schlagen(&Gegner,10) // Gegner 10 healths abziehen.

und in der methonde schlagen kannst du dann auf die GetHurt Methode von Gegner zugreifen...
wenn deine klasse angenommen CFigur heißt kann das so ausschaun:
CFigur::schlagen(CFigur* Target, int healths)
{
...Target->GetHurt(healths);
...
}

CFigur::GetHurt(int healths)
{
... hitpoints -= healths;
}

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....


Dieser Beitrag wurde am 16.03.2002 um 22:38 von KillerDoc bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
002
16.03.2002, 22:49
Darkman|two



im großen und ganzen versteh ich das irgendwie dann müsste meine klasse so aussehen:
Quellcode:
#include <stdio.h>

class CPlayer
{
public:

int schlagen();
int weglaufen();
int NameEingeben();
int getroffen();

private:

char Name[20];
int Health;
};

oder wie?? oder muss ich dann da noch was einfügen von wegen Target?? wie muss ich des denn einbinden?? Ich glaub ich hab grad nen kleinen Blackout :(

--

zum Seitenanfang zum Seitenende Profil || Suche
003
16.03.2002, 23:04
KillerDoc



Target wird als Parameter an schlagen übergeben...
Das heißt du musst die methode schlagen nicht mit

int schlagen();

sondern mit

int schlagen(CPlayer* Target, int healthabzug);

deklarieren. und

int getroffen(); braucht natürlich auch eine infromation wie stark derjenige denn nun getroffen wurde dh du musst auch hier einen parameter übergeben also gehört das so deklariert:

int getroffen(int healthabzug);

Bei Methoden kannst du genauso wie bei normalen globalen Funktionen Parameter übergeben :)
Wenn du nicht wießt wie das bei normalen Funktionen geht solltest du dir mal ein tut über Funktionen durchlesen bevor du dich an klassen traust..

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
004
16.03.2002, 23:13
Darkman|two



jo des mit den Parametern weis ich nur wie setze ich jetzt den Zeiger von Target auf die Klasse Gegner die ich ja mit CPlayer Gegner erstelle weil ich ja auhc noch die Klasse CPlayer Player erstelle... Kannst du mit des auch noch grade erklären?? thx für die jetzige Mühe

--

zum Seitenanfang zum Seitenende Profil || Suche
005
16.03.2002, 23:20
KillerDoc



naja. du übergibst beim aufruf von schlagen einfach die Adresse von Gegner. Die bekommst du mit dem & Operator.

CPlayer Player;
CPlayer Gegner;

Player.schlagen([b]&Gegner[\b],10); //Player haut jetzt Gegner und zieht 10 healtsh ab :)

allright ?

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
006
16.03.2002, 23:27
Darkman|two



jo des war ja vorher auch klar nur muss ich CPlayer in der main.cpp datei deklarieren oder in der class.cpp ?? sichelrich nciht in der class.h oder in alle oder nur in den beiden ersten?? dann wär es das eigentlich

--

zum Seitenanfang zum Seitenende Profil || Suche
007
16.03.2002, 23:34
KillerDoc



Deklariert gehörts entwedr in der .cpp datei wo die die instanzen deklariert werden, also in deinem fall wahrscheinlich main.cpp oder - wie es schöner ist in einer eigenen header datei - class.h von mir aus dann musst du allerdings natürlich die class.h in deiner main.cpp #include'n

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
008
16.03.2002, 23:36
Darkman|two



aso ok also reicht es wenn ich des nur in der class.h deklariere hät die sowieso in die main includiert nur ich hab es bis jetzt eigneltich meist immer in der main.cpp in der main funktion gemacht nur ich war mir nicht ganz sicher ob des dann net mehr geht naja ok thx für deine Hilfe.

--

zum Seitenanfang zum Seitenende Profil || Suche
009
16.03.2002, 23:50
Darkman|two



hmm doch nochmal nen kleines prob :(( tut mir ja leid das ich noch nicht soviel Erfahrung hab mit Klassen mit Funktionen komm ich viel besser klar nur ich will des halt mit den Klassen lernen...naja ok
also wenn ich des nu bei mir in der class.h deklariere mit CPlayer Gegner und CPlayer Player meckert der
Quellcode:
--------------------Konfiguration: KonsolenGame - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
class.cpp
Linker-Vorgang läuft...
class.obj : error LNK2005: "class CPlayer  Player" (?Player@@3VCPlayer@@A) bereits in main.obj definiert
class.obj : error LNK2005: "class CPlayer  Gegner" (?Gegner@@3VCPlayer@@A) bereits in main.obj definiert
Debug/KonsolenGame.exe : fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden
Fehler beim Ausführen von link.exe.

KonsolenGame.exe - 3 Fehler, 0 Warnung(en)

aber ich hab in der main.cpp nur
Quellcode:
#include <stdio.h>
#include "class.h"


void main()
{
//Gegner.ZeigeHealth();
}

stehen mehr net und was ist da nu wieder falsch??? Ich glaub ich gehe dir auf die Nerven oder?? tut mir leid

--

zum Seitenanfang zum Seitenende Profil || Suche
010
16.03.2002, 23:56
KillerDoc



errr. Die Instanzen von CPlayer - also Gegner und Player solltest du natürlich schon in der main.cpp bzw. in der main funktion deklarieren.. ich dachte du willst wissen wo du die Klasse selbst deklarieren sollst :)

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
011
17.03.2002, 00:03
Darkman|two



nene aber wenn ich die doch in der main.cpp bzw. in der main funktion deklariere dann fehlen die mir doch wieder in der class.cpp wo ich die methoden drin erstelle. Also cih mach das so ne class.h wo die klassen rein kommen ne class.cpp wo die methoden drin erstellt werden und in der main.cpp kommt dann die main funktion und da wird dann alles aufgerufen z.B. soll Gegner geschlagen werden? Ja dann schlage(CPlayer* Target, int Healthabzug); so dachte ich des verstehst?? oder ist da nen gravierender denkfehler drin??

--

zum Seitenanfang zum Seitenende Profil || Suche
012
17.03.2002, 00:11
KillerDoc



Hmm also so von der idee her stimmts eh.
aber Gegner und Player sind ja nur instanzen von CPlayer... das hat im grunde nichts mit dem design der Klasse CPlayer selbst zu tun, also solltest du das in der main.cpp deklarieren. und wenn du sie nur in der main() funktion brauchst kannst du sie ja in der main() funktion deklarieren. dann kann nix schiefgehn :)

Was du machen solltest.. - kA ob dus nicht eh schon machst - am anfang jeder eigenen header datei solltest du sowas einbauen:

#ifndef _NAMEDERDATEI_H_
#define _NAMEDERDATEI_H_

und am ende der header datei noch

#endif

das stellt sicher das in deinem projekt keine header datei zweimal included wird

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
013
17.03.2002, 00:19
Darkman|two



hmm jetzt hab ich auf einmal 8 Fehler :(
Quellcode:
--------------------Konfiguration: KonsolenGame - Win32 Debug--------------------
Kompilierung läuft...
main.cpp
h:\konsolen_programme\konsolengame\main.cpp(8) : error C2065: 'Gegner' : nichtdeklarierter Bezeichner
h:\konsolen_programme\konsolengame\main.cpp(8) : error C2228: Der linke Teil von '.ZeigeHealth' muss eine Klasse/Struktur/Union sein
class.cpp
h:\konsolen_programme\konsolengame\class.cpp(6) : error C2653: 'CPlayer' : Keine Klasse oder Namespace
h:\konsolen_programme\konsolengame\class.cpp(9) : warning C4508: 'CPlayer' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
h:\konsolen_programme\konsolengame\class.cpp(11) : error C2653: 'CPlayer' : Keine Klasse oder Namespace
h:\konsolen_programme\konsolengame\class.cpp(14) : error C2065: 'Name' : nichtdeklarierter Bezeichner
h:\konsolen_programme\konsolengame\class.cpp(19) : error C2653: 'CPlayer' : Keine Klasse oder Namespace
h:\konsolen_programme\konsolengame\class.cpp(21) : error C2065: 'Gegner' : nichtdeklarierter Bezeichner
h:\konsolen_programme\konsolengame\class.cpp(21) : error C2228: Der linke Teil von '.Health' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von cl.exe.

KonsolenGame.exe - 8 Fehler, 1 Warnung(en)

Hast du ICQ?? dann kannst du mir da vielleciht besser helfen als hier...

--

zum Seitenanfang zum Seitenende Profil || Suche
014
17.03.2002, 00:26
KillerDoc



in der class.cpp gib auch noch ein #include "class.h" rein...

icq hab ich leider ned.. ich mag das programm ned :)
aber wenn du willst kannst du in #fragfactory auf Quakenet irc kommen

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
015
17.03.2002, 00:49
Darkman|two



hmm irc hab ich installier sag mal wie der server heißt quakenet.irc ?? oder wie ??
und nu hab ich ich des auch gemacht nur immernoch 6 Fehler
Quellcode:
--------------------Konfiguration: KonsolenGame - Win32 Debug--------------------
Kompilierung läuft...
class.cpp
h:\konsolen_programme\konsolengame\clas.h(3) : warning C4067: Unerwartete Symbole nach Praeprozessor-Direktive - Zeilenvorschub erwartet
h:\konsolen_programme\konsolengame\clas.h(4) : error C2008: '.' : unerwartetes Zeichen in Makrodefinition
h:\konsolen_programme\konsolengame\class.cpp(21) : error C2065: 'Gegner' : nichtdeklarierter Bezeichner
h:\konsolen_programme\konsolengame\class.cpp(21) : error C2228: Der linke Teil von '.Health' muss eine Klasse/Struktur/Union sein
main.cpp
h:\konsolen_programme\konsolengame\clas.h(3) : warning C4067: Unerwartete Symbole nach Praeprozessor-Direktive - Zeilenvorschub erwartet
h:\konsolen_programme\konsolengame\clas.h(4) : error C2008: '.' : unerwartetes Zeichen in Makrodefinition
h:\konsolen_programme\konsolengame\main.cpp(8) : error C2065: 'Gegner' : nichtdeklarierter Bezeichner
h:\konsolen_programme\konsolengame\main.cpp(8) : error C2228: Der linke Teil von '.ZeigeHealth' muss eine Klasse/Struktur/Union sein
Fehler beim Ausführen von cl.exe.

KonsolenGame.exe - 6 Fehler, 2 Warnung(en)
und hier mal der source von meiner clas.h
Quellcode:
#include <stdio.h>

#ifndef clas.h
#define clas.h

class CPlayer
{
public:
CPlayer();

int schlagen(CPlayer* Target, int Healthabzug);
int weglaufen();
int NameEingeben();
int getroffen(int Healthabzug);
int ZeigeHealth();

private:

char Name[20];
int Health;
};

#endif

--

zum Seitenanfang zum Seitenende Profil || Suche
016
17.03.2002, 00:52
KillerDoc



irc.quakenet.eu.org is der server

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
017
17.03.2002, 01:05
Tron



in einem token darf kein '.' sein, also "clas_h" statt "clas.h"

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche