Programmieren lernen(C++)


Recommended Posts

Postinho

Das hätte ich irgendwie mit getType() versucht, hat aber leider ned funktioniert.

hmm einfach mit (*act_iterator)->getType();

Bzw. ich hätte auch einfach nur "act_iterator.act(counter)" ausgeführt, damit auch diese Listenelemente die Bewegungen etc. durchführen, weiß allerdings jetzt nicht, wie ich das implementieren soll. Das erkennt er bei mir nicht.

(*act_iterator)->act(counter);

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

blablabla

Mhm tja, hab jetzt sowieso komplett neu begonnen, weil mein Programm schon so kaputt war und ich mich schon selbst fast nicht mehr ausgekannt hab. Bis jetzt läuft es eh schon ganz gut, nur mit dem Befehl typeid aus der <typeinfo> hab ich ein kleines Problem:

Also ich lasse mir Objekte von abgeleiteten Klassen in eine Liste der Basisklasse schreiben. Deklariert ist die Liste wie folgt:

list<Item*> items;

Die Objekte, die hineingepusht werden, haben die Klassen Ant, Anthill und Food. Der Debugger zeigt mir auch an, dass die jeweiligen Objekte in die jeweiligen Listen verschoben werden, soweit sogut.

Also das wär mal die Funktion, wo ich auf dem Spielbrett durch die ganzen kleinen Felder fahre und auf jedem Feld die Funktion aufrufe, die einen Iterator durch die jeweilige Liste fahren lässt:

void print_fields() {
    unsigned int height = this->height;
    unsigned int width = this->width;
    Field* print = this->start;
    Field* help = this->start;

    for(unsigned int i=1;i<=width;i++) {
	    for(unsigned int j=1;j<=height;j++) {
		    print = help->get_south();
		    this->ausgabe_iterator(print,i,j);
	    };
	    help = help->get_east();
    };
   };

Das ist dann die Iterator-Funktion: Zuerst den Iterator deklariert, dann an den Beginn der Liste gesetzt (bzw. eben mit begin() eins vor die Liste) und dann möchte ich mir immer mit typeid(print_iterator).name() den Typ heraus schreiben, also Ant, Food oder Anthill.

   void ausgabe_iterator(Field* position, unsigned int i, unsigned int j) {
    list<Item*>::iterator print_iterator;
    cout << "(" << i << "," << j << "): ";
    for(print_iterator = position->items.begin();print_iterator!=position->items.end();++print_iterator) {
           cout << typeid(print_iterator).name() << " ";
       };
    cout << endl;
   };

Ausgabe sollte dann bspw. so sein:

(1,1): Food Ant Anthill
(1,2): Food Food
(1,3):
(1,4): Ant
(1,5): Ant Food

Stattdessen kommt aber nur das:

(1,1):
(1,2):
(1,3):
(1,4):
(1,5):

Benutze ich das typeid falsch? Oder ist der Iterator falsch deklariert oder gar die Liste?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Postinho

hmm hab zwar mit typeid noch nie was gemacht, aber ich stelle mir vor, es sollte eher so verwendet werden:

cout <<typeid(*print_iterator).name()<<" ";

aja und noch was

mach solche sache nicht!!

unsigned int height =this->height;
unsignedint width =this->width;

mach eher sowas:

unsigned int height =this->mHeight;
unsignedint width =this->mWidth;

oder so

unsigned int height =this->_height;
unsignedint width =this->_width;

und über die ständige angabe von this-> lässt sich auch streiten ;)

bearbeitet von Taffspeed

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

blablabla

hmm hab zwar mit typeid noch nie was gemacht, aber ich stelle mir vor, es sollte eher so verwendet werden:

cout <<typeid(*print_iterator).name()<<" ";

aja und noch was

mach solche sache nicht!!

unsigned int height =this->height;
unsignedint width =this->width;

mach eher sowas:

unsigned int height =this->mHeight;
unsignedint width =this->mWidth;

oder so

unsigned int height =this->_height;
unsignedint width =this->_width;

und über die ständige angabe von this-> lässt sich auch streiten ;)

mhm, das hat leider auch nicht funktioniert. Kennst du irgendwelche anderen Wege, die Klassen von Objekten auszugeben bzw. zu vergleichen?

Sollte ich statt der ständigen Angabe von this eher einfach mehr Variablen definieren um mir das this zu sparen?

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Postinho

du kannst ja einfach eine virtuelle methode machen die dir eine id (zb. enum-wert) oder auch den name zurück gibt in der basis-klasse machst eine pure virtual methode (virtual void abc() = 0;) und dann müssen eh alle die von der basis klasse erben diese methode ausprogrammieren.

Sollte ich statt der ständigen Angabe von this eher einfach mehr Variablen definieren um mir das this zu sparen?
naja, mehr als vorher musst du ja eh nicht definieren, andere namen sollen es halt sein. wenn die lokale varialbe und die memeber den gleichen namen habne, dann kommt nie was gutes raus. wegen dem this brauchst dir nichts denken, entweder man will es so oder will es nicht, wobei man eher häufiger die leute findet die es nicht verwenden :D

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

blablabla

du kannst ja einfach eine virtuelle methode machen die dir eine id (zb. enum-wert) oder auch den name zurück gibt in der basis-klasse machst eine pure virtual methode (virtual void abc() = 0;) und dann müssen eh alle die von der basis klasse erben diese methode ausprogrammieren.

Jo, so werd ichs jetzt dann probieren, das sollte normalerweise auf jeden Fall funktionieren. Ansonsten hab ich etwas beim definieren des Iterators oder der Liste verhaut.

naja, mehr als vorher musst du ja eh nicht definieren, andere namen sollen es halt sein. wenn die lokale varialbe und die memeber den gleichen namen habne, dann kommt nie was gutes raus. wegen dem this brauchst dir nichts denken, entweder man will es so oder will es nicht, wobei man eher häufiger die leute findet die es nicht verwenden :D

Aja ok, dient quasi einfach zur besseren Unterscheidung und ist auch dazu da, um mögliche Verwechslungen auszuschließen (menschliche und auch compiler-technische). Das this ist zurzeit einfach noch so komfortabel :D mit effektivem Programmieren hab ichs zurzeit noch nicht so, ich bin ja schon froh, wenns überhaupt funktioniert, was ich mach :D

Aber jedenfalls danke ;)

Edit:

Habs jetzt übrigens hinbekommen. Ein anderes Hindernis bei dem ganzen war wohl auch, dass ich die Positionen falsch angegeben habe, der is jedes Mal in das exakt selbe Feld gehüpft, da war halt nie was. :facepalm:

bearbeitet von Evilken

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

  • 2 months later...
blablabla

Mal was zu den Exceptions in C++ oder auch Java:

Hab jetzt beispielsweise folgenden Code:

public int getValue (int x) {
 return data.arr[x];
}

Es wär garantiert so einfach, aber ich check einfach nicht, wie ich da eine Exception drüber haut, die mir beispielsweise prüft, ob sich der x-Wert in einem bestimmten Bereich aufhält (weil eben das Array nicht größer ist).

Ich lös das jetzt immer mit if-Anweisungen, das kann aber nicht die ideale Lösung sein.

bearbeitet von Evilken

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Im ASB-Olymp

Mal was zu den Exceptions in C++ oder auch Java:

Hab jetzt beispielsweise folgenden Code:

public int getValue (int x) {
 return data.arr[x];
}

Es wär garantiert so einfach, aber ich check einfach nicht, wie ich da eine Exception drüber haut, die mir beispielsweise prüft, ob sich der x-Wert in einem bestimmten Bereich aufhält (weil eben das Array nicht größer ist).

Ich lös das jetzt immer mit if-Anweisungen, das kann aber nicht die ideale Lösung sein.

ich würds in java so machen:

public int getValue (int x) throws XYException {
 if(x >= data.arr.length) {
	  throw new XYException();
 }
 return data.arr[x];
}

btw exceptions :kotz:

bearbeitet von churchill

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Im ASB-Olymp

Bitte?!? Sei froh...

zum selbst programmieren nervens einfach. so ansich sinds ja praktisch.

anderes problem in java: kennt sich jemand mit java swing aus? ich soll von einer datenbank daten laden und diese in einer oberfläche wiedergeben. hab mir gedacht dazu eignet sich jtable, jedoch komm ich damit überhaupt nicht zurecht, weil ich nur schwer daten hinzufügen und löschen kann. gibts andere komponenten, die man dazu verwenden kann? oder wie kann man in einer jtable am besten elemente löschen und schreiben?

hier mein aktueller code:

private JTable tbl_pferde;
private JScrollPane sp_pferde;
private Object[][] data;
private String[] collumnnames;

collumnnames = new String[] {"ID","Name","Geschlecht","Rabatt","Foto","Therapie","Therapiepreis"};
data = new Object[][] {/*elemente*/};
tbl_pferde = new JTable(data,collumnnames);
sp_pferde = new JScrollPane(tbl_pferde);

bearbeitet von churchill

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

  • 2 weeks later...
  • 2 weeks later...
Surft nur im ASB

Hallo Leute, ich habe ein Anfängerproblem mit C#:

Und zwar würde ich gerne diese Werte: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml

in eine einfache Tabelle reinbekommen, aber ich schaffe es nicht. Kann mir jemand Tipps geben? Wenn ich zB ein Dienstverweis hinzufügen will bekomme ich immer einen Error. ich hätte es mit foreach eingelesen. Aber es passt irgendwie hinten und vorne nicht.

Lg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Captain Awesome

XML und C# :love:

Da gibts viele schöne Möglichkeiten, und händische Schleifen gehören nicht unbedingt dazu.

Was du mit "einfache Tabelle" meinst ist mir leider nicht ganz klar, bitte erläutere das etwas genauer.

Ansonsten starte mal mit dem Artikel: http://support.microsoft.com/kb/307548

Dort wird beschrieben wie du mit dem XmlTextReader (using System.Xml) eine XML-Datei einliest, und mit den diversen Einträgen irgendwas machst - in dem Beispiel noch etwas sinnfrei aufbereitet, aber es ist eben ein Einsteigerartikel.

Ganz grob würde ich jetzt also sagen: du schaust dir an wie man mit DataTables umgeht (System.Data), wie man mit dem XmlTextReader arbeitet, und zu guter Letzt vielleicht noch ein bisschen XPath - dann ist das eine Sache von ein paar Zeilen.

Sag Bescheid, wenn du bei was speziellem mehr Hilfe brauchst!

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...


  • Folge uns auf Facebook

  • Partnerlinks

  • Unsere Sponsoren und Partnerseiten

  • Wer ist Online

    • Keine registrierten Benutzer online.