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

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

28.04.2006, 17:27

Problem mit char Array

Hi,

habe folgendes Problem:

ich habe eine Funktion geschrieben, die eine eingabe mit cin durchführen soll(te).



Wie man sich warscheinlich denken kann war ich mal wieder zu doof meine Probleme alleine zu lösen.
Ich habe auch schon etliche möglichkeiten durchprobiert diese Funktion selber ins laufen zu kriegen.

Wenn man die Funktion aufruft, soll sie ein Array von Typ char deklarieren.

Die länge des arrays soll als Parameter übergeben werden(interger wert).

Da liegt auch schon das Problem:

Es Kommen die Folgenden Fehler:

Quellcode

1
2
3
4
z:\faststream\src\io.cpp(95) : error C2057: expected constant expression
z:\faststream\src\io.cpp(95) : error C2466: cannot allocate an array of constant size 0
z:\faststream\src\io.cpp(95) : error C2133: 'cText' : unknown size
z:\faststream\src\io.cpp(101) : error C2065: 'cText' : undeclared identifier


Das soll wohl soviel heisen wie das es des Array nicht mit einer grösse von 0 deklarieren kann.

Das liegt wohl daran, dass die Variable dieeigentlich die Länge enthält noch nicht gefüllt ist.

Ich habe es auch schon mit Standart Parametern probiert, allerdings muss ich dann den Prototyp so ändern, dass dort eben nicht des mit dem Standart Parameter steht, sonder nur:

C-/C++-Quelltext

1
char eingabe(int iLengthOfText);


anstatt

C-/C++-Quelltext

1
char eingabe(int iLengthOfText = 2048);


Sonst kommt da nämlich irgendwas mit redefinition.(Ein Fehler)


Hier der Komplette Quellcode Der Funktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char eingabe(int iLengthOfText)
{
    // Variablendeklaration

    char cText[iLengthOfText];



    // Texteingabe

    cin.getline(cText, iLengthOfText);




    // Nun noch den eingegebenen Text zurückgeben

    return cText;
}


Kann mir da bitte jemand helfen?


mfg,

Faule Socke

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

28.04.2006, 17:34

Wenn du ein Array deklarierst, muss der Compiler dessen Größe schon zur Kompilierzeit kennen. Darum steht da auch:

expected constant expression

Wenn du Speicher dynamisch reservieren willst, dann tu das mit new.

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

28.04.2006, 17:35

Hää??

Ich lese C++ in 21 Tagen. Aber ich glaube so weit bin ich noch net!(Ich bin beim Zeiger Kapitel!)


mfg,

Faule Socke

Trotzdem Danke für deine Hilfe!

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

4

28.04.2006, 17:56

es geht nur, indem du entweder den int als constant deklarierst, oder mit new (wie david sagte) arbeitest:

C-/C++-Quelltext

1
char eingabe(const int iLengthOfText);


oder:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
char* eingabe(int iLengthOfText) 
{ 
    // Variablendeklaration 

    char* cText = new char[iLengthOfText]; 

    // Texteingabe 

    cin.getline(cText, iLengthOfText); 

    // Nun noch den eingegebenen Text zurückgeben 

    return cText; 
}


Vergiss aber nicht, cText muss mit delete[] wieder gelöscht werden!

PS: Abgesehen von deinem Problem, solltest du mit wchar_t also mit unicode arbeiten!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

5

28.04.2006, 18:07

die länge von "normalen" arrays muss dem compiler beim kompilieren bekannt sein. eine möglichkeit diesem problem aus dem weg zu gehen ist den array dynamisch zu erzeugen, eben mit 'new'...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Der Rückgabewert muss ein Zeiger sein...

char* eingabe(int iLengthOfText)
{
    // hier erstellst du einen dynamischen array und speicherst einen 

    // zeiger auf das erste glied in pcText

    char* pcText = new char[iLengthOfText];



    // Texteingabe

    cin.getline(pcText, iLengthOfText);




    // Nun noch den eingegebenen Text zurückgeben

    // Du darfst nicht vergessen später den speicher auch wieder mit delete freizugeben

    return pcText;
} 
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

6

28.04.2006, 18:08

Zitat von »"Black-Panther"«

es geht nur, indem du entweder den int als constant deklarierst, oder mit new (wie david sagte) arbeitest:

C-/C++-Quelltext

1
char eingabe(const int iLengthOfText);


oder:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
char* eingabe(int iLengthOfText) 
{ 
    // Variablendeklaration 

    char* cText = new char[iLengthOfText]; 

    // Texteingabe 

    cin.getline(cText, iLengthOfText); 

    // Nun noch den eingegebenen Text zurückgeben 

    return cText; 
}


Vergiss aber nicht, cText muss mit delete[] wieder gelöscht werden!

PS: Abgesehen von deinem Problem, solltest du mit wchar_t also mit unicode arbeiten!


Wie gesagt, so weit bin ich noch net.

Wie lösche ich des dann den wieder?

Hab zwei vorstellungen wie des gehen könnte:

1.: cText.delete();

2.: delete[cText];


mfg,

Faule Socke

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

7

28.04.2006, 18:13

Quellcode

1
delete[] Text;


aber du kannst keinen Wert zurückgeben, den du vom speicher löscht. Das Beispiel ist denkbar dumm.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

8

28.04.2006, 18:17

C-/C++-Quelltext

1
delete [] cText;

Die eckigen Klammern geben an, dass ein Array gelöscht werden soll.
Übrigens hast du soweit ich weiß keine andere Möglichkeit außer new und delete zu verwenden.
In deinem Code endet die Lebenszeit von cText mit Verlassen der Funktion eingabe(). Ein weiterer Fehler ist, dass auch ein konstantes Array nicht als char sondern als char* zurückgegeben wird.

// zu langsam^^

Werbeanzeige