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

01.01.2009, 15:04

Strings

Hallo,
ich bin jetzt bei Strings angelangt.Da Strings ja einfacher sind wollte meinen Code überarbeiten.Ich hab dazu erstmal eine kleine Übung gemacht und einfach ein Projekt erstellt,Namen abgefragt,Namen wieder geändert.
Hat ja super funktioniert.Nun wollt ich das aber in mein Tic-Tac-Toe umsetzen




C-/C++-Quelltext

1
2
3
4
5
6
string sSpieler1;
string sSpieler2;

};

#endif


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
void CPlayer::Name ()
{
    cout<<"Spieler 1 bitte geben sie ihren Namen ein"<<endl;
    cin>>sSpieler1;
    cout<<"Name von Spieler 1: "<<sSpieler1<<endl;
    cout<<endl;
    cout<<"Spieler 2 bitte geben sie ihren Namen ein"<<endl;
    cin>>sSpieler2;
    cout<<"Name von Spieler 2: "<<sSpieler2<<endl;
    cout<<endl;

  
}








C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1>d:\porgrammieren\spiele\projekte\tic-tac-toe (mit klassen)\tic-tac-toe mit klassen\header\Player.h(22) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sSpieler1'
1>d:\porgrammieren\spiele\projekte\tic-tac-toe (mit klassen)\tic-tac-toe mit klassen\header\Player.h(22) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\porgrammieren\spiele\projekte\tic-tac-toe (mit klassen)\tic-tac-toe mit klassen\header\Player.h(22) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\porgrammieren\spiele\projekte\tic-tac-toe (mit klassen)\tic-tac-toe mit klassen\header\Player.h(23) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sSpieler2'
1>d:\porgrammieren\spiele\projekte\tic-tac-toe (mit klassen)\tic-tac-toe mit klassen\header\Player.h(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>d:\porgrammieren\spiele\projekte\tic-tac-toe (mit klassen)\tic-tac-toe mit klassen\header\Player.h(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>Player.cpp
1>D:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Header\Player.h(22) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sSpieler1'
1>D:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Header\Player.h(22) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>D:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Header\Player.h(22) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>D:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Header\Player.h(23) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sSpieler2'
1>D:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Header\Player.h(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>D:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Header\Player.h(23) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>..\CPP\Player.cpp(108) : error C2065: 'sSpieler1': nichtdeklarierter Bezeichner
1>..\CPP\Player.cpp(109) : error C2065: 'sSpieler1': nichtdeklarierter Bezeichner
1>..\CPP\Player.cpp(112) : error C2065: 'sSpieler2': nichtdeklarierter Bezeichner
1>..\CPP\Player.cpp(113) : error C2065: 'sSpieler2': nichtdeklarierter Bezeichner
1>Code wird generiert...
1>Das Buildprotokoll wurde unter "file://d:\Porgrammieren\Spiele\Projekte\Tic-Tac-Toe (Mit Klassen)\Tic-Tac-Toe mit Klassen\Tic-Tac-Toe mit Klassen\Debug\BuildLog.htm" gespeichert.
1>Tic-Tac-Toe mit Klassen - 16 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========



Was ist den da los?
Bei dem anderen Projekt hats doch auch funktioniert.

2

01.01.2009, 15:12

Zitat

#include <iostream>
#include <string>
std::string s;

Hast du "string" eingebunden und beachtet, dass string im namespace std ist?

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

3

01.01.2009, 15:16

Zitat

dass string im namespace std

:oops: Ich vergess das immer :oops:

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

01.01.2009, 15:20

Zitat von »"Errschaffer"«

Zitat

dass string im namespace std

:oops: Ich vergess das immer :oops:


Dann ist jetzt der Zeitpunkt für dich gekommen es dir ganz fest einzuprägen! :)
@D13_Dreinig

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

5

01.01.2009, 16:13

Zitat von »"Errschaffer"«

Zitat

dass string im namespace std

:oops: Ich vergess das immer :oops:


Ansonsten kannst du dir auch die Fehlermeldung mal genau anschauen. Es kommt praktisch immer so etwas, wenn der Typ nicht bekannst ist. ;)

Zitat

error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'sSpieler1'

Der wird dir wahrscheinlich noch ein paar mal begegnen. Auch mit anderen Bibliotheken oder anderen Teilen der Standardbibliothek. ;)

btw.
Der nächste ist auch sehr interessant:

Zitat

error C4430: Fehlender Typspezifizierer - int wird angenommen.


Weisst auch darauf hin, dass der Typ fehlt. ;)

Also das nächste mal, wenn du solche Kompilerfehler hast die Fehlermeldungen ganz genau lesen und den Code noch 2-3 mal anschauen. Und wenn du den Fehler nach einer Stunde noch nicht gefunden hast, kannst du mal posten, aber wenn du ihn selbst findest nach einem Weilchen, dann prägt der sich besser ein, als wenn wir dir sagen, was es war. ;)

6

01.01.2009, 20:07

Zitat von »"Errschaffer"«

Zitat

dass string im namespace std

:oops: Ich vergess das immer :oops:
Merk dir am besten gleich, dass alles aus der C++-Standardbibliothek (natürlich ausser Makros) im Namensraum std ist.

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

7

01.01.2009, 21:04

Und es gibt noch eine möglichkeit seine Fehler zu lösen:

Google mit Fehler oder Boardsuche mit Fehler ^.^

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

8

03.01.2009, 14:12

Ok ich habs ja verstanden :)

Wo wir gerade schonmal dabei sind ich hab da noch ein Problem.
Ich will jetzt den Namen den ich oben abgefragt habe wieder ändern.
Also hab ich mir das hier geschrieben.


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
cout<<"Bitte neuen Namen eingeben"<<endl;
        cin>>snewName;

        //Größe des alten Names ermitteln

        OldSize=static_cast<int> (m_sSpieler1.length ());
        //Größe des neuen Namens emitteln

        NewSize=static_cast<int>(snewName.length());
        //Position ermitteln

        Position=static_cast<int> (m_sSpieler1.find(m_sSpieler1,0));
        //Namen ersetzen

        m_sSpieler1.replace(Position,OldSize,snewName,NewSize);


Also erstmal wird er neue Name abgefragt dann die größe des alten und neuen Namens. und halt die Position wo der alte Name anfängt.
Dann rufe ich ja die Funktion .replace auf und übergebe die ganzen Sachen als Parameter. Nur beim dritten zickt er rum.


Quellcode

1
1>..\CPP\Player.cpp(146) : error C2664: 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::replace(unsigned int,unsigned int,const _Elem *,unsigned int)': Konvertierung des Parameters 3 von 'std::string' in 'const char *' nicht möglich


Ist ja logisch weil es muss ja ein Konstanterwert sein.Aber ich kann ja nicht vorher wisssen was da rein kommt.Was kann ich da machen?

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

9

03.01.2009, 14:13

std::string -> const char* geht mit der c_str() Methode von std::string.

Edit: Abgesehen davon kannst du den neuen Namen auch einfach per = Operator zuweisen.
EditEdit: Oder noch direkter direkt aus dem cin stream per >> Operator. Würde ich persönlich aber nicht machen, Benutzereingaben erstmal auswerten schadet nie ;)

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

10

03.01.2009, 14:15

ich versteh zwar nicht, was du machen willst... aber um einen string in einen const char* umzuwandeln kannst du die funktion c_str() verwenden:

C-/C++-Quelltext

1
2
string sDummy = "dies ist ein test";
const char* pcDummy = sDummy.c_str();


so funktioniert c_str(). also einfach den string und dann die member-funktion c_str davon aufrufen ;)

--
bei deinem beispiel versteh ich nicht... du willst doch den namen ersetzten? warum brauchst du dann die find und die replace funktion? du kannst doch einfach der variable den neuen wert zuweisen...

edit: jetzt war Das Gurke mal wieder schneller :roll:

Werbeanzeige