Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit Funktionen und Klassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.04.2006, 20:53 Uhr
Kamikaze



Nabend

Hoffe ich stelle das hier jetzt ins richtige Forum.
So zu meinem Problem muss ich erstmal was erklären.

Das ist ein Schulprojekt. Es geht dabei darum die Vererbung zu benutzen.
Es gibt eine Welt und in die werden Schafe geboren,sterben usw...
Im Programm gibt es männliche und weibliche Schafe die von einer Klasse Schafe abgeleitet sind.
Das Programm ist so gesehen auch schon geschrieben. Leider kann ich nicht testen ob es richtig funktioniert weil ich immer eine bestimmten Fehler bekomme.
Der kommt bei allen Funktionen die ich ansprechen will die in den Klassen male.cpp und female.cpp stehen...Hier mal ein Beispiel:
chain_01.cpp(66, 39): 'iGetSchwanger' is not a member of 'SCHAF'
Wenn ich F1 drücke bekomme ich Folgende Erklärung dazu

(Bezeichner gehört nicht zu struct)
Sie versuchen fälschlicherweise, einen Bezeichner als Element einer Struktur zu behandeln.
Überprüfen Sie Ihre Deklarationen.

Und das passiert bei fast allen Funktionen ausser wenn ich eben funktionen aus der SCHAF Klasse aufrufe.
Den Fehler eingegrenzt hab ich ja schonmal das irgendwo was beim struct falsch ist, aber ich weiß nicht wie ich den beheben soll....hier mal ein bissel Code damit man sich das besser vorstellen kann

C++:
//female.cpp
int SCHAF_F::iGetSchwanger()
    {
        return(iSchwanger);
    }
//...
//chain.h
typedef struct tagliste
{
    SCHAF* Schaf;
   struct tagliste* ptNext;
}
liste;
//Aufruf in chain_01.cpp
if(ptTemp->Schaf->iGetSchwanger()==1)



Weiß ja nicht was ihr noch so braucht. Ich hab das ganze Projekt einfach mal hochgeladen.
Gibts hier
http://martin-heydecke.de/files/Simu_051103.rar
Da fehlen zwar noch ein paar funktionen usw., aber ich will ja nur erstmal diesen einen Fehler weg bekommen damit ich weiterarbeiten kann.
Wär echt toll wenn mir jemand helfen könnte. Ist wirklich sehr dringend.
DAnke schonmal im Voraus

P.S. Ok ist im falschen Forum, hätte nach Konsolenanwenungen gemusst...sry

mfg Kami

Dieser Post wurde am 09.04.2006 um 21:02 Uhr von Kamikaze editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.04.2006, 22:43 Uhr
Spacelord
Hoffnungsloser Fall


Der Typ deiner Liste ist SCHAF*. Die Objekte die dahinter stehen sind zwar von den spezielleren Typen SCHAF_F unf SCHAF_M aber über den Typ SCHAF sind die speziellen Methoden der mänlichen und weiblichen Spezialisierungen nicht ansprechbar.
Der Typ Schaf kennt keine Methode iGetSchwanger!
Du hast da nen grundlegendes Designproblem.

Was konkret sind denn die Anforderungen die gestellt sind?

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.04.2006, 23:00 Uhr
Kamikaze



Das ist sozusagen eine weiterführung eines Programms.
Also zuerst gabs nur ein Programm mit Schafen. DA hat das mit der Struktur ja gut funktioniert.
Aber dann sollte das eben so umgebaut werden das es männliche und weibliche gibt.
Also bräuchte ich sozusagen 2 Strukturen, einmal für SCHAF_M und SCHAF_F?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.04.2006, 23:13 Uhr
Spacelord
Hoffnungsloser Fall


Teilweise könntest du dein Problem eventuell über polymorphes Verhalten lösen aber z.B. für die Methode getSchwanger macht es keinen Sinn diese als virtuelle Methode in Schaf zu deklarieren.Männliche Schafe können nicht schwanger werden.
An den Stellen an denen z.B. auf getSchwanger zugegriffen werden soll könntest du nen dynamic_cast<SCHAF_W> machen(unschön!) und somit probieren dein Schaf Zeiger in ein weibliches Schaf zu casten.Ist das dynamische Objekt hinter dem Zeiger ein weibliches Schaf gelingt der Cast,und du kannst die Methode getSchwanger aufrufen;ist es kein weibliches Schaf gibt dynamic_cast Null zurück.
Um nen paar halbwegs brauchbare Tips zu geben müsstest du schon mit nen paar Infos rüberkommen was die weiblichen Schafe können sollen,was die männlichen spezielles können sollen und wie diese Methoden im weiteren Verlauf genutzt werden .
Also,welche Anforderungen wurden gestellt?
Ich persönlich habe keine Lust mir den kompletten Code reinzuziehen....

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.04.2006, 23:38 Uhr
Kamikaze



Die weiblichen Schafe können nur Schwanger werden. Das sind sie dann für ein paar Runden und dann wird ein neues Schaf generier/geboren. Ab dann kann das Schaf wieder Schwanger werden.
Die männlichen können eben neue Schafe zeugen, aber das dann auch erst wieder nach einer bestimmten anzahl von runden.
Das wars eigentlich schon.
Ein normales Schaf, also was alle Schafe können ist Laufen und Fressen.

Das hört sich alles recht simpel an wenn man es so erklärt, aber wenn dann noch die Welt und die ganze interaktion reinkommt wird das sehr schnell kompliziert.

Eigentlich will ich ja einfach nur Schafe generiern können. Mal Männliche und mal Weibliche. Die müssen dann sehr oft miteinander verglichen werden. Wer ist das stärkste Schaf auf dem Feld und darf deshalb die Blumen darauf fressen. Wer paart sich mit wem, nur das stärkste männliche mit dem stärksten weiblichen usw.
Ein Schaf kann nur dann ein Feld gehen wenn es genug Blumen im Bauch hat, wenn nicht stirbt es.
Die Welt besteht aus Feldern z.b. 4x4...Ein Schaf kann sich muss sich pro Zug auf ein angrenzendes Feld bewegen (8 Möglichkeiten)

Glaub das wären erstmal das wichtigste. Wie gesagt, das funzt ja alles vom alten Programm als es nur Schafe gab. Aber jetzt muss eben das mit den männlichen und weiblichen schafen integiert werden ohne gleich den ganzen Code umzubasteln..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.04.2006, 09:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


machs halt so:

BaseSchaf
- fressen
- laufen
- nahrung_im_bauch
- staerke
- usw

mSchaf : BaseSchaf
- Kämpfen
- Zeugen
- usw

wSchaf : BaseSchaf
- Schwanger
- gebären
- usw

dann evtl noch ne virtuelle Funktion die dir jeweils z.B den namen oder ein enum der unterklasse liefert, damit du unterscheiden kannst was für ein objekt grad vorliegt, dann reicht nämlich ein Array/vector aus BaseSchafpointern, welchen du entweder mSchaf oder wSchaf zuweist.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.04.2006, 20:57 Uhr
ao

(Operator)


Könntest du auch in SchafBase eine virtuelle Methode "Fortpflanzen ()" einbauen, die von den männlichen und weiblichen Ableitungen passend überladen wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: