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

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

1

30.12.2008, 15:14

Vektor Porblem

Hallo,
ich wollte jetzt als kleine Übung eine kleine Spielerverwaltung schreiben.
Halt nicht mit Arrays sondern Vektoren.

Also hab ich das hier geschrieben.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <vector>

//Prototypen



//Struktur

struct S_Spieler
{
    vector<char> vName (10);
    int Team;
    int Level;
    int Raum;
    int Punkte;

};

//Instanzen

vector<S_Spieler> vSpieler (4);


int main ()
{
vector<int>::iterator i;//Iterator


return 0;
}

Und dann kam das hier dabei raus

Zitat

1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(12) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(12) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(12) : error C2238: Unerwartete(s) Token vor ';'
1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(20) : error C2143: Syntaxfehler: Es fehlt ';' vor '<'
1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(20) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(25) : error C2062: 'int'-Typ unerwartet
1>d:\porgrammieren\übungsprogramme\vektoren-teamverwaltung\vektoren-teamverwaltung\main.cpp(25) : error C2039: 'iterator': Ist kein Element von '`global namespace''
1>Das Buildprotokoll wurde unter "file://d:\Porgrammieren\Übungsprogramme\Vektoren-Teamverwaltung\Vektoren-Teamverwaltung\Debug\BuildLog.htm" gespeichert.
1>Vektoren-Teamverwaltung - 7 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Was ist den da falsch?

2

30.12.2008, 15:18

vector befindet sich im Namespace std.
Du kannst die veralterte Datei includieren (vector.h), unter das include ein "using namespace std" schreiben oder den Namespace jedesmal explizit angeben (std::vector<char>...).
Die erste Idee ist dumm, weil es eben veralbert ist, die zweite würde ich in Header nur sehr bedingt machen und die dritte ist Schreibarbeit.
Lieber dumm fragen, als dumm bleiben!

3

30.12.2008, 15:24

Die zweite würde ich nicht nur in headern sehr bedingt machen.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

4

30.12.2008, 15:27

Zitat von »"Jonathan_Klein"«

vector befindet sich im Namespace std.
Du kannst die veralterte Datei includieren (vector.h), unter das include ein "using namespace std" schreiben oder den Namespace jedesmal explizit angeben (std::vector<char>...).
Die erste Idee ist dumm, weil es eben veralbert ist, die zweite würde ich in Header nur sehr bedingt machen und die dritte ist Schreibarbeit.


Ah das hab vergessen. Danke.
Jetzt sagt er mir aber bei dem char Vektor in der Struktur folgendes: error C2059: Syntaxfehler: 'Konstante'. Ich hab doch keine Konstante erstellt :?

Anonymous

unregistriert

5

30.12.2008, 15:29

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>


struct S_Spieler
{
    std::vector<char> vName;
    int Team;
    int Level;
    int Raum;
    int Punkte;
};

struct V_Spieler
{
    std::vector<S_Spieler> vSpieler;
};


int main ()
{
     S_Spieler s_spieler;
     V_Spieler v_spieler;

     s_spieler.vName.push_back(10);
     v_spieler.vSpieler.push_back(4);

     std::vector<int>::iterator i;//Iterator


     s_spieler.vName.clear();
     v_spieler.vSpieler.clear();

return 0;
}

(Ungetestet!)

6

30.12.2008, 16:12

Re: Vektor Porblem

Zitat von »"Errschaffer"«



//Struktur
struct S_Spieler
{
vector<char> vName (10);
int Team;
int Level;
int Raum;
int Punkte;

};

Du solltest den Konstruktor von einem Member (vName) nicht in der Deklaration sondern in der initialisierungsliste des Konstruktors der Klasse (Struktur) aufrufen.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

7

30.12.2008, 16:17

Zitat von »"Jonathan_Klein"«

vector befindet sich im Namespace std.

richtig

Zitat von »"Jonathan_Klein"«

Du kannst die veralterte Datei includieren (vector.h)
Diese Dateien existieren nicht und werden niemals existieren. Allein schon, dass du vorschlägst so etwas zu tun, ist mehr als grob fahrlässig für seine Weiterentwicklung!

@Erschaffer: Denk nicht mal dran eine vector.h zu inkludieren! Es sei denn du willst in anderen Foren Morddrohungen erfahren!

Zitat von »"Jonathan_Klein"«

unter das include ein "using namespace std" schreiben
Wieder politisches halbes Gerede! Nächstes mal schreibst du noch dazu, warum er es nur in Source-Dateien machen soll und nicht in Headern, dann gäbs nix zu motzen. Aber so? Tja, wo soll er es reinschreiben? Source, Header, Beide? Zwei der drei Varianten wären wieder grob fahrlässig.

Zitat von »"Jonathan_Klein"«

den Namespace jedesmal explizit angeben (std::vector<char>...).
Richtige Aussage.

Zitat von »"Jonathan_Klein"«

Die erste Idee ist dumm, weil es eben veralbert ist
Stimmt, genau so dumm wie schon auf die Idee zu kommen es zu erwähnen! Ich weiß nicht wie lange du keinen Compiler mehr geöffnet hast, aber seit Visual Studio 2002 gibt es diese Header nicht mehr - weil sie nie offiziell existiert haben! Dazu wurden sie nie veralbert sondern verhasst!

Zitat von »"Jonathan_Klein"«

die zweite würde ich in Header nur sehr bedingt
Das glaube ich sogar, andere die wissen welche Konsequenzen es haben kann, würden es nie machen.

Zitat von »"Jonathan_Klein"«

...und die dritte ist Schreibarbeit.
Zu Hilfe! Die beste Variante ist schreibarbeit....

Sorry, aber langsam dreh ich am Rad: Was du hier für ein Halbwissen oder sogar aufgeschnapptes Wissen weitergibst, an Anfänger die hoffen, dass sie von Profis lernen um selbst besser zu werden, ist mehr als katastrophal und es wundert mich nicht, wenn irgendwann User ankommen und fragen: "warum geht vector.h nicht oder iostream.h? warum ist das ein fehler? hab using namespace doch im header? ist doch richtig?"

Wenn du keine Ahnung hast oder nur denkst du hättest Ahnung, lass es bitte! ODER schreib mehr dazu und keinen halben Scheiß, der mehrfach interpretiert werden kann, weil er nicht klar genug ist sondern mehr politisches Gerede ist.

Um es mal auf den Punkt zu bringen: Es kotzt mich regelrecht an! Dein Gelabere was jeder anders interpretiert, weil du nicht auf den Punkt kommst, geschweige mal den Code anpackst zum helfen oder ähnliches ist widerlich. Schreib ganz klar, was Sache ist und nicht "ja nimmste dieses, nimmste jenes" was irgendwo "professionell klingen mag, aber praktisch fürn Arsch ist, weil es keine Hilfe ist! Eben generisches Gerede im Stil von Stoiber, Merkel und Steinmeier in einem, was hier keine Sau braucht. Hier wollen die User klare Antworten. Will man "schön klingenden Scheiß" hören, fährt man nach Bonn oder Berlin - sowas hat in der IT nichts zu suchen! Wären die RFCs so geschrieben, wie du Fragen beantwortest, hätten wir heute nicht mal HTTP!

Sorry, aber diesmal hast du den Vogel richtig abgeschossen.

Errschaffer
Schreib immer den Namespace-Scope davor, damit bist du immer auf der sicheren Seite. Ein einfaches

C-/C++-Quelltext

1
std::
tut keinem weh und wer sich wegen 5 Zeichen ans Bein pisst, dem ist sowieso nicht zu helfen.

Ein "using namespace" sollte man immer sein lassen, da dies Mehrdeutigkeiten hervorrufen kann, dies ist auch der Grund wieso man es nur lokal (in Source-Dateien) machen sollte oder in einem Funktionsrumpf. Ist sowas in Header-Dateien, wird dieses "using namespace" überall "weitervererbt" in andere Dateien was Folgefehler hervorrufen kann/wird.

Dann noch etwas, was du dir in den Schädel hauen solltest, gerade jetzt wo wieder aufgeschnapptes Wissen ans Tageslicht gekommen ist: C++-Header aus der STL haben keine Extensions!

Anonymous

unregistriert

8

30.12.2008, 16:18

Jonathan_Klein
Warum Konstruktor von der Instanz? Normalerweise sollte man die Instanzen außerhalb der eigenen Klasse/Struktur deklarieren. Es sei denn die Struktur/Klasse hat von Haus aus einen eigenen Konstruktor. (-:

Jonathan, "using namespace std" sollte man tunlichst vermeiden. Lieber "std::" vortippen und gut ist.

EDIT:
Gerade erst gelesen:

Zitat

Ein "using namespace" sollte man immer sein lassen, da dies Mehrdeutigkeiten hervorrufen kann


Zitiere ich auch nicht um Jonathan fertig zu machen, obwohl er schon Mist erzählt, sondern weil es fundamental richtig und vollkommen korreckt ist.

Kreuzigt das "using namespace std"! ;-D

Anonymous

unregistriert

9

30.12.2008, 16:19

Coders-Square
Korrekt!

10

30.12.2008, 16:50

Erschaffer, wieso nimmst du einen char Vektor für einen Namen, wenn es doch std::string gibt?
Damit lässt sich wesentlich einfacher arbeiten.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige