Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 09.01.2004, 15:13 Titel: return gibt nur Sonderzeichen zurück |
|
|
hi leuts,
ich hab mal wieder ein Problem mit meiner string-Klasse. Die speichert den String in string von Typ char*. Den String kann man mit dieser get-Funktion erhalten:
Code: |
char * get(void) {
return string;
}
|
Das funktioniert eigentlich. Wenn ich aber so eine Funktion schreibe:
Code: |
char* test(char *String)
{
mstring mystring(String);
return mystring.get();
}
|
die einen String speichert und mit return String.get() zurückgibt, gibt die Funktion nur eine lange Kette des gleichen Sonderzeichens zurück!
Wie kann ich das ändern? Was ist falsch? |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 09.01.2004, 15:41 Titel: |
|
|
Hi
Hm...kanneigentlich eine Menge sein, etwas mehr Code aus deiner String-Klasse wäre schon hilfreich...
Zitat: |
gibt die Funktion nur eine lange Kette des gleichen Sonderzeichens zurück!
|
hm..ich vermute mal dann wird der interne "String" der Klasse irgendwie nicht richtig Beschrieben bzw gar nicht(?)
wie sieht denn z.b. der Konstruktor der Klasse für einen char * aus?ist er überhaupt definiert? |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 09.01.2004, 15:50 Titel: |
|
|
Ich kenn zwar deinen Konstruktor der Stringklasse nicht aber müsste es nicht
mystring("String") statt mystring(String) heißen? |
|
Nach oben |
|
|
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:08 Titel: |
|
|
also der gesamte code der string-Klasse ist schon im Thread "#pragma warning funktioniert nicht". Der Konstruktor sieht so aus:
Code: |
mstring::mstring(char *String)
{
string = new char[MAX_LENGTH];
strcpy(string,String);
Length = (int)strlen(String);
}
|
|
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:12 Titel: |
|
|
Hast du das, was ich oben gesagt habe schon probiert? |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:23 Titel: |
|
|
@Hasenfuß Das würde doch keinen Sinn machen. mystring("String") würde doch einen mystring mit dem Inhalt "String" erzeugen. Du hast übersehen, dass 'String' als Parameter übergeben wird.
viele Grüße
Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:26 Titel: |
|
|
Also entweder ich überseh da was oder...
Der Konstruktor übernimmt als Parameter einen char*. Und String ist kein char*, "String" aber schon..
[EDIT] Ah jetzt.. jo.. stimmt is schwachsinn |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:37 Titel: |
|
|
C++Builder hat Folgendes geschrieben: | also der gesamte code der string-Klasse ist schon im Thread "#pragma warning funktioniert nicht". |
Das stimmt nicht. Dort ist zwar deine Headerdatei von deiner Objektklasse, aber nicht die Funktionsrümpfe. Entweder du könntest bitte den ganzen Code posten oder die .Get() Funktion. Bei der müsste ja der Hauptfehler mitliegen...
Aber du machst das so?
Code: |
mstring string1("Ich bin eine Zeichenkette!");
cout << string1.get();
|
und es funktioniert nicht? _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:44 Titel: |
|
|
ja gut
und ja so mache ich das
also das ist die get()-Funktion:
Code: |
char *mstring::get(void)
{
return string;
}
|
ach so das hatte ich vorhin vergessen:
wenn ich das Programm debugge steht da bei Name: "mstring::get zurückgegeben" und bei Wert steht der Wert von string. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 09.01.2004, 18:58 Titel: |
|
|
Bei mir geht's aber:
Code: | #pragma once
#include <iostream.h>
#include <math.h>
#include <windows.h>
#include <stdio.h>
class mstring
{
private://Attribute
char *string;//(dynamisches array) enthält char-zeichen
int Length;
public://Memberfunktionen
#define MAX_LENGTH 256
mstring(char *String);
char *get(void);
};
mstring::mstring(char *String)
{
string = new char[MAX_LENGTH];
strcpy(string,String);
Length = (int)strlen(String);
}
char *mstring::get(void)
{
return string;
}
int main()
{
mstring string1("Ich bin eine Zeichenkette!");
cout << string1.get();
return 0;
} |
Ist natürlich dramatisch gekürzt, ich lass sogar den Speicher vom String von Windows wieder freigeben und mach das gar nicht selber! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 09.01.2004, 19:12 Titel: |
|
|
das funktioniert bei mir ja auch und war nicht die Frage
es funktioniert nicht dies:
Code: |
char* test(char *String)
{
mstring mystring(String);
return mystring.get();
}
|
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 09.01.2004, 20:16 Titel: |
|
|
ach so...das ist ja dann völlig klar
du erzeugst dein Klassenobjekt
das kopiert den String in ein anders char array-feld
deine get funktion gibt einen zeiger zu deinem neu angelegten array-feld zurück
die funktion test() wird verlassen dein mstring objekt gelöscht
der zeiger der auf das char feld-array in der msstring instanz gezeigt hat ist nicht mehr vorhanden, ist aus dem gültigkeitsbereich draußen....und wurde deshalb gelöscht
der zeiger zeigt nun auf einen gelöschten speicherbereich..indem allesmögliche stehen kann...
das war alles
hoffe ich konnte dir helfen! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
C++Builder Senior JLI'ler
Anmeldedatum: 04.10.2003 Beiträge: 235
Medaillen: Keine
|
Verfasst am: 09.01.2004, 20:21 Titel: |
|
|
ja gut dann ist das klar aber
wie komme ich an den string |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 09.01.2004, 20:35 Titel: |
|
|
Du könntest theoretisch den mstring dynamisch erzeugen, allerdings Vorsicht vor memory-leaks
Was ist denn der Sinn von dieser Funktion? Sie bekommt ein char*, erzeugt damit ein mstring und gibt den Inhalt des mstrings als char* wieder zurück...oder willst damit einfach nur die get()-Methode testebn?
viele Grüße
Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.01.2004, 21:03 Titel: |
|
|
C++Builder hat Folgendes geschrieben: | ja gut dann ist das klar aber
wie komme ich an den string |
Du könntest z.B. eine Membervariable einbauen, die den String enthält. In deiner Get-Funktion wird dann der Stringinhalt in dieser Variable gespeichert und die Variable zurückgegeben. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
|