Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Copax

Frischling

  • »Copax« ist der Autor dieses Themas

Beiträge: 17

Beruf: Fachinformatiker

  • Private Nachricht senden

11

04.02.2014, 15:56

@BlueCobold: Ja ok ich hab in der Hektik Array(..) geschrieben, meinte natürlich aber (wie oben auch zu sehen) Array[..] ... wäre nett wenn du nicht gleich so flamen würdest^^

@Fireball: Also lege ich die Instanzen in den Vector ab und der Datentyp des Vectors muss dann mit den Membervariablen übereinstimmen oder ist das egal? :hmm:
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt."



Albert Einstein

Volker_Neff

Treue Seele

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

12

04.02.2014, 16:24

Ja die beiden Typen müssen die gleichen sein

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

13

04.02.2014, 16:29

@Fireball: Also lege ich die Instanzen in den Vector ab und der Datentyp des Vectors muss dann mit den Membervariablen übereinstimmen oder ist das egal? :hmm:

Meinst du die Elemente des Vectors? Wenn ja, stimmt das. Allerdings kannst du auch Instanzen abgeleiteter Klassen speichern(dafür bitte ein Vector mit Smart-Pointern verwenden), aber nicht wieder laden! Das scheint für dich aber noch zukunftsmusik zu sein. Mach dir also nicht so viele gedanken darüber, behalte es aber für später im Hinterkopf.

Wieso verwendest du printf und nicht stringstream bzw. den +-Operator von std::string?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

04.02.2014, 17:31

@BlueCobold: Ja ok ich hab in der Hektik Array(..) geschrieben, meinte natürlich aber (wie oben auch zu sehen) Array[..] ... wäre nett wenn du nicht gleich so flamen würdest^^
Nun, wenn Dein Code so aussieht, dann sollte es auch funktionieren. Flame war da keiner dabei.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

15

04.02.2014, 18:04

Zitat von »NachoMan«

stringstream

Wieso stringstreams?
Einfach auf die Standardausgabe (cout) ausgeben reicht doch. Ein Stringstream oder gar einzelne Strings wären bloß ein Overhead, der noch dazu alles auch noch komplizierter macht.

Zitat von »Fireball«

Wie man ein Array per Pointer an eine Funktion übergibst kannst du hier lesen. Ich rate jedoch davon ab.

Bei einem statischen Array kann man mit dem "guten alten C-Array" immer noch ganz gut beraten sein.
Containerobjekte auf diese Weise als Parameter herumzureichen halte ich sogar teilweise für schlechten Stil. Dann schreibt man sich im umgebenden Code fest, welchen Container er verwenden muss selbst wenn das für das Interface eigentlich ohne Belang ist. Auch wenn ich nicht denke, dass so etwas für den Fragesteller von Bedeutung ist.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

16

04.02.2014, 18:08

Ein Lehrer hat mal zu mir gesagt, dass derjenige, der eine Aussage macht, auch dafür verantwortlich ist, dass sie richtig verstanden wird. Eine Woche später habe ich ihm einen Test mit offensichtlich falschen Ergebnissen gegeben und behauptet, ich hätte die Aufgabenstellung nicht verstanden und dafür sei er ja verantwortlich :vain:

Er hatte trotzdem teilweise Recht. Gerade bei einer Frage sollte man versuchen möglichst Präzise zu sein und sich über eine Berichtigung eines Fehlers in der Fragestellung freuen. Du lernst indem du eine Idee entwickelst, die sich entweder bestätigt oder nicht. Ein Forum dient dazu diese Ideen zu äußern und sie von anderen auf Fehler überprüfen zu lassen. Wenn du einen Fehler machst, heißt das nicht, dass du dumm oder untalentiert bist. Es ist Teil des Lernprozesses und sollte gefeiert und nicht bedauert werden.

Zitat

Wieso stringstreams?
Einfach auf die Standardausgabe (cout) ausgeben reicht doch. Ein Stringstream oder gar einzelne Strings wären bloß ein Overhead, der noch dazu alles auch noch komplizierter macht.

Stimmt!

Zitat

C-/C++-Quelltext

1
while(x==0, x<=79999)

Was soll das bewirken?

Containerobjekte auf diese Weise als Parameter herumzureichen halte ich sogar teilweise für schlechten Stil. Dann schreibt man sich im umgebenden Code fest, welchen Container er verwenden muss selbst wenn das für das Interface eigentlich ohne Belang ist. Auch wenn ich nicht denke, dass so etwas für den Fragesteller von Bedeutung ist.

Das ist aber kein Grund auf klassische Arrays zurückzugreifen. Man reicht einen Container auch garnicht herum, genau so wenig wie klassische Arrays. Man stellt ein Interface zur Verfügung, mit dem man den Container indirekt beinflussen kann und reicht dieses herum.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »NachoMan« (04.02.2014, 18:19)


Copax

Frischling

  • »Copax« ist der Autor dieses Themas

Beiträge: 17

Beruf: Fachinformatiker

  • Private Nachricht senden

17

05.02.2014, 07:40

@NachoMan: Das While (x==0,x<=79999) füllt das Array[80000] mit den Instanzen auf.. funktioniert auch^^

@BlueCobold: Er funktioniert ja auch, nur bekomme ich das Array nicht an andere Funktionen übergeben da diese dann einen Datentypen erwarten, den ich ihnen nicht geben kann bzw. nicht weiß welchen ich nutzen soll.. Class ist vlt. der Datentyp aber das will die Funktion iwie nicht so recht nehmen..

Das mit dem cout weiß ich auch, aber habe mir leider das printf angewöhnt.. ich finde es in vielen Punkten auch schöner da man leichter Formatierungen der Ausgabe angeben kann.. finde das cout iwie wirr mit den ganzen "<<" ^^ .. aber wie gesagt ist nur zum überprüfen ob alles stimmt.. ich nehme es am Ende wieder raus weil ich es ja nicht brauche bei dem fertigen Programm..

Ach und um noch auf das Thema SDL zu kommen.. habe jetzt zwei oder drei fertige (kleine) Programme mit der SDL geschrieben und finde die Bibliothek nicht schlecht.. SFML habe ich mir noch nicht angeschaut.. war vor einiger Zeit mal auf der Suche nach einer guten Bibo um Fenster zu erzeugen und Bilder auszugeben und wurde von mehreren Seiten auf SDL verwiesen..

So und um noch mal zum Thema zu kommen.. den vector nutze ich dann anstatt des Array´s? Sprich:
main()
{
EinKlassenName vector<int> v;
}
?
"Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt."



Albert Einstein

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

18

05.02.2014, 08:59

@NachoMan: Das While (x==0,x<=79999) füllt das Array[80000] mit den Instanzen auf.. funktioniert auch^^

Das zeigt, dass du dein Programm nicht richtig getestet hast.
Das funktioniert nämlich nicht so, wie du denkst.

Dein Code ist gleich in mehrfacher Hinsicht falsch bzw. schlecht:
- Der erste Test x == 0 sollte wohl eher x >= 0 heißen. Oder was willst du damit bezwecken?
- Man verknüpft logische Ausdrücke nicht mit dem Komma-Operator. Der liefert nämlich einfach nur den letzten Ausdruck, in diesem Fall x <= 79999, d.h. die andere Bedingung wird komplett ignoriert - was zu deinem Glück gut ist, da sie falsch ist. Was du brauchst, sind die Operatoren && (und) und || (oder).
- Für sowas benutzt man for-Schleifen.

EinKlassenName vector<int> v;

Nein, das ist sinnlos und syntaktisch falsch.
Was bezweckst du mit dem int?

Richtig wäre:
std::vector<EinKlassenName> v;

Wenn du den Vektor an eine Funktion übergibst, pass unbedingt auf, dass du dies per Referenz tust!
Ansonsten wird nur eine Kopie des Vektors an deine Funktion übergeben. Das ist langsam und vermutlich nicht, was du willst.

Aufgabe für dich:
Finde heraus, wie Referenzen in C++ funktionieren.

Und kauf dir dringend ein Buch!
So wird das nichts! Dir fehlen ja selbst die allereinfachsten Grundlagen, die man auf den ersten Seiten eines Buches lernt.

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

19

05.02.2014, 11:09

@SpieleProgrammierer Da gehe ich mit dir konform, wenn das Array statisch und die Größe bekannt ist.


Ich rate jedoch immer noch dazu erst einmal ein gutes C++ Buch zu lesen, damit Fehler wie sie David Schergen bemängelt nicht gemacht werden.

20

05.02.2014, 11:25

Selbst wenn eine Sequenz von Objekten statisch und die Größe bekannt ist, nähme ich std::vector oder std::tr1::array bzw. im neuen Standard std::array. So ist die Information über die Größe beim Objekt bzw. beim Typ und geistert nicht wild umher.

Zitat

Ich bin nicht der Messias.
Ich sage, du bist es, Herr. Und ich muss es wissen, denn ich bin schon einigen gefolgt.

https://bitbucket.org/bwbg

Werbeanzeige