Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Zeiger/Referenz C++

Diskussion: Zeiger/Referenz C++ im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich habe hier ein ( ich gebe es zu : lächerliches Problem aber ich hab irgendwie nen Blackout ...

Antwort
Alt 03.10.06, 18:53   #1 (permalink)
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard Zeiger/Referenz C++

Anzeige

Hallo, ich habe hier ein ( ich gebe es zu : lächerliches Problem aber ich hab irgendwie nen Blackout )

Code:
#include <iostream>

class c1
{
    public:
      c1();
      void setString(std::string test);
      void modify(void);
    private:
      std::string neuer_string;
};

c1::c1()
{
}

// Methode für Wertzuweisung
void c1::setString(std::string test)
{
    test = neuer_string;
}

void c1::modify(void)
{
    // Der String aus main soll nun einen neuen Wert erhalten
    neuer_string = "Kein Haus";
}

int main(void)
{
    std::string haus = "haus";
    // Objekt der Klasse c1
    c1 *klasse1 = new c1();
    // Alten Wert ausgeben
    std::cout<<"Vorher  : "<<haus<<std::endl;
    // Wert aendern
    klasse1->setString(haus);
    klasse1->modify();
    std::cout<<"Nachher : "<<haus<<std::endl;
    delete klasse1;
    return 0;
}
Ich habe in der main() einen std::string und moechte diesen in der Klasse c1 aendern, dies muss ich ja per Zeiger oder Referenz machen, ich habe hier mal mein Glueck versucht, aber irgendwie komme ich auf keinen grünen Zweig, hat einer mal einen Vorschlag ?
Dawen ist offline   Mit Zitat antworten
Alt 03.10.06, 19:00   #2 (permalink)
 
Registriert seit: 01.11.03
lagalopex Leistung: Facit NTK
Likes: 0
Standard

Wie schon gesagt... eine Referenz:
Code:
void c1::setString(std::string &test)
{
    test = neuer_string;
}
Also nur das & vor test setzen...
lagalopex ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 03.10.06, 20:58   #3 (permalink)
 
Registriert seit: 15.10.04
sheepd Leistung: Facit NTK
Likes: 0
Standard RE: Zeiger/Referenz C++

Code:
#include <iostream>
#include <string>

class c1
{
    public:
      c1();
      void setString(std::string &test);
      void modify(void);
    private:
      std::string neuer_string;
};

c1::c1()
{
}

// Methode für Wertzuweisung
             void c1::setString(std::string &test)
{
    test = neuer_string;
}

void c1::modify(void)
{
    // Der String aus main soll nun einen neuen Wert erhalten
    neuer_string = "Kein Haus";
}

int main(void)
{
    std::string haus = "haus";
    // Objekt der Klasse c1
    c1 *klasse1 = new c1();
    // Alten Wert ausgeben
    std::cout<<"Vorher  : "<<haus<<std::endl;
    // Wert aendern   
	klasse1->modify();  // muss vor setString kommen, sonst hat neuerString keinen sinnvollen Wert
    klasse1->setString(haus);
    std::cout<<"Nachher : "<<haus<<std::endl;
    delete klasse1;
    return 0;
}
Du musst wie lagalopex sagt das ganze als Referenz übergeben.
Außerdem musst du die beiden Funktionsaufrufe vertauschen (siehe Code).
sheepd ist offline   Mit Zitat antworten
Alt 03.10.06, 23:37   #4 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

So, erstmal danke für die Antworten.

Euer Vorschlag mit :

1. Den String Wert zuweisen
2. Dann in der main() den String ändern ist ja eigentlich genau das umgekehrte was ich haben muss :

Ich bräuchte :

klasse1->setString(haus);
klasse1->modify();

Euer Vorschlag :

klasse1->modify();
klasse1->setString(haus);


Ich will aber erst der Klasse meinen std::string übergeben, da modify wird eigentlich bei mir auch nicht in der main aufgerufen, sonders intern in der Klasse, im der Methode modify soll nun der String verändert werden und ich begebe mich wieder ins Haupt Programm, wo nun der neue modifizierte und nicht der alte String stehen soll.

Das Programm ist halt eine GUI, man drueckt einen Button, es öffnet sich ein neues Fenster, dem Fenster will ich die std::string variable aus der GUI übergeben, die GUI wird blockiert, im neuen Fenster will ich den Wert verändern , wenn ich das Fenster schliessen, wird die GUI wieder aktiviert und die std::string Variable in der GUI soll nun den neuen Wert haben. Ich könnte das auch mit get/set Methode machen, aber auf dieses hin und her habe ich keine Lust und ein Zeiger ist irgendwie eleganter.
Dawen ist offline   Mit Zitat antworten
Alt 03.10.06, 23:54   #5 (permalink)
 
Registriert seit: 01.11.03
lagalopex Leistung: Facit NTK
Likes: 0
Standard

Code:
#include <iostream>

class c1
{
    public:
      void setString(std::string *test);
      void modify(void);
    private:
      std::string *neuer_string;
};

void c1::setString(std::string *test)
{
    neuer_string = test;
}

void c1::modify(void)
{
    if(neuer_string)
        *neuer_string = "Kein Haus";
}

int main(void)
{
    std::string haus = "haus";
    c1 *klasse1 = new c1();
    if(!klasse1)
        return 1;
    std::cout << "Vorher  : " << haus << std::endl;
    klasse1 -> setString(&haus);
    klasse1 -> modify();
    std::cout << "Nachher : " << haus << std::endl;
    delete klasse1;
    return 0;
}
lagalopex ist offline   Mit Zitat antworten
Alt 04.10.06, 00:14   #6 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Jupp, das geht wunderbar, habe ich gesagt ist ganz einfach, aber ich bin ja nicht drauf gekommen THX
Dawen ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Zeiger/Referenz C++
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
C++ Referenz Nick H. Code Kitchen 5 01.12.05 20:27
C und Zeiger Dawen Code Kitchen 3 09.11.05 21:49
c++ referenz Scrat Code Kitchen 2 04.08.04 15:30
Zeiger foobar Code Kitchen 6 08.04.04 13:10
Zeiger gelöscht Code Kitchen 8 27.10.03 20:48


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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61