JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=cdd2bdc1700bd1382a4bd54c8a259661Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

return gibt nur Sonderzeichen zurück
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 15:13    Titel: return gibt nur Sonderzeichen zurück Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Mazze
JLI'ler


Alter: 39
Anmeldedatum: 02.01.2004
Beiträge: 145

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 15:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 15:50    Titel: Antworten mit Zitat

Ich kenn zwar deinen Konstruktor der Stringklasse nicht aber müsste es nicht

mystring("String") statt mystring(String) heißen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:12    Titel: Antworten mit Zitat

Hast du das, was ich oben gesagt habe schon probiert?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:23    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hasenfuß
Senior JLI'ler


Alter: 37
Anmeldedatum: 20.08.2002
Beiträge: 291

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:26    Titel: Antworten mit Zitat

Also entweder ich überseh da was oder...

Der Konstruktor übernimmt als Parameter einen char*. Und String ist kein char*, "String" aber schon.. Confused

[EDIT] Ah jetzt.. jo.. stimmt is schwachsinn Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:44    Titel: Antworten mit Zitat

ja gut Embarassed

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 18:58    Titel: Antworten mit Zitat

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! Wink
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 19:12    Titel: Antworten mit Zitat

das funktioniert bei mir ja auch und war nicht die Frage Wink

es funktioniert nicht dies:
Code:

char* test(char *String)
{
    mstring mystring(String);
    return mystring.get();
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 20:16    Titel: Antworten mit Zitat

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 Laughing

hoffe ich konnte dir helfen! Wink
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 20:21    Titel: Antworten mit Zitat

ja gut dann ist das klar aber Confused
wie komme ich an den string Question
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 20:35    Titel: Antworten mit Zitat

Du könntest theoretisch den mstring dynamisch erzeugen, allerdings Vorsicht vor memory-leaks Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.01.2004, 21:03    Titel: Antworten mit Zitat

C++Builder hat Folgendes geschrieben:
ja gut dann ist das klar aber Confused
wie komme ich an den string Question

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum