2016-07-29 12 views
-1
#include <string> 

struct Person 
{ 
    Person(std::string name) { 
    } 

    std::string greet(std::string other_name) 
    { 
    name="Joe"; 
    return "Hi " + other_name + ", my name is " + name; 
    } 

    std::string name; 
}; 

Mit der Greet-Funktion möchte ich einen Namen (z. B. John) zurückgegeben werden, jedoch gibt die Funktion, wie geschrieben, nichts zurück. Es ist leer nach der Zeichenfolge "mein Name ist".Warum gibt diese Begrüßungsfunktion nicht den akzeptierten Wert zurück?

Wie ordne ich den Wert von name innerhalb der Struktur richtig, so dass ich eine ordnungsgemäße Rückkehr haben kann?

Vielen Dank für jeden Schritt in die richtige Richtung!

+4

Es ist nicht sehr klar, was der "richtige" Rückgabewert ist. Sollte es "Hallo X mein Name ist Joe" oder etwas anderes sein? Bei einer Schätzung würde ich sagen, dass Sie möchten, dass der an den Konstruktor übergebene Wert verwendet wird? Es könnte Ihre Absicht klarer machen, wenn Sie eine kleine Hauptfunktion hinzufügen, die zeigt, wie "Person" verwendet wird. –

+1

Welchen Compiler benutzen Sie? Für mich funktioniert Ihr Code wie erwartet. – nshct

+0

Veröffentlichen Sie ein vollständiges Programm (d. H. Ein main, das die Funktion aufruft), das das Problem demonstriert! – Hurkyl

Antwort

-1

versuchen, Breakpoints zu verwenden?

lief ich den Code mit g ++ mit MinGW und bekam das gleiche Ergebnis änderte es dann zu diesen

#include <iostream> 
#include <string> 

using std::string; 

struct Person 
{ 
    string name; 
    Person(string _name) { 
     name = _name; 
    } 

    string greet(string other_name) 
    { 
    return "Hi " + other_name + ", my name is " + name; 
    } 

}; 

int main() 
{ 
    Person person("foo"); 
    std::cout << person.greet("bar"); 
    return 0; 
} 

das Problem ist, dass Name ist null, aber der Compiler gibt keine Warnungen diese Ausgänge „Hallo bar, mein Name ist foo“, ich selbst zusammengestellt und bekam korrektes Ergebnis

+3

Schnelle Korrektur: 'name' ist nicht null. Es ist default-initialisiert und für eine 'std :: string' bedeutet das eine leere Zeichenfolge. Und eine kleine Verbesserung: 'Person (string _name): name (_name) {}' initialisiert 'name' mit einem' std :: string' Konstruktor, bevor der Body des Konstruktors eingegeben wird. Mit 'name = _name' im Hauptteil des Konstruktors kann' name' zuerst default-konstruiert und dann zugewiesen werden, wobei im Grunde genommen zwei Jobs statt eines ausgeführt werden. – user4581301

+0

Wow, Breakpoints ... Okay, das schien das Problem mit meinem Versuch zu sein, dies herauszufinden. Könnte jemand einige Novizen empfehlen, um sicherzustellen, dass ich die "kleinen Dinge" verstehe? – anichols

+0

gut beantwortet Sie Ihre eigene Frage, durchlaufen Sie es Schritt für Schritt :) für Haltepunkte ich benutze gdb statt auf kleine Dinge konzentrieren, stellen Sie sicher, dass Sie verstehen die Grundlagen zuerst – hec

-1
#include <string> 

struct Person 
{ 
    Person(std::string _name) { 
    name = _name;} 

    std::string greet(std::string other_name) 
    { 

    return "Hi " + other_name + ", my name is " + name; 
    } 

    std::string name; 
}; 
+1

Fügen Sie einige Kommentare zu Ihrer Antwort – kvorobiev

0

Es ist nicht das Namensfeld im Konstruktor aus dem Parameter initialisiert. das heißt den Konstruktor ändern:

#include <string> 

    struct Person 
    { 
     Person(std::string name) : name(name) {} { 
    } 

    std::string greet(std::string other_name) 
    { 
     return "Hi " + other_name + ", my name is " + name; 
    } 

    std::string name; 
    }; 

Dieses Ihr Problem lösen soll und wird die gewünschte Lösung zurück.

Verwandte Themen