2016-04-09 23 views
0

Ich schreibe ein Programm, das sich mit Klassen und Objekten und dergleichen beschäftigt. Ich muss eine Rectangle-Klasse erstellen und die Funktionen innerhalb dieser Klasse ausführen, von denen eine das Zurückgeben einer Zeichenfolge mit allen Informationen über mein Rectangle (display_info()) enthält. Das Problem ist, wenn ich versuche, display_info() in meiner Quelle zu verwenden, kommt nichts auf dem Bildschirm. Es ist leer. Was mache ich falsch mit dieser Funktion? Ich poste all meinen Code, damit Sie sehen können, ob irgendwo anders ein Fehler ist. Vielen Dank.Einführung C++: Verketten von Strings und Rückgabe in einer Funktion?

Rubrik:

#ifndef RECTANGLE_H 
#define RECTANGLE_H 
#include <iomanip> 
#include <string> 
#include <iostream> 
using namespace std; 

class Rectangle 
{ 
public: 
    Rectangle(); 
    Rectangle(double l, double w); 
    void set_length(double l); 
    void set_width(double w); 
    double get_perimeter(); 
    double get_area(); 
    string display_info(); 

private: 
    double length; 
    double width; 
}; 

#endif 

Rectangle.cpp:

#include "Rectangle.h" 

Rectangle::Rectangle() 
{ 
    length = 0; 
    width = 0; 
} 

Rectangle::Rectangle(double l, double w) 
{ 
    length = l; 
    width = w; 
} 
void Rectangle::set_length(double l) 
{ 
    length = l; 
    return; 
} 
void Rectangle::set_width(double w) 
{ 
    width = w; 
    return; 
} 
double Rectangle::get_perimeter() 
{ 
    double perimeter = 2 * (length * width); 
    return perimeter; 
} 
double Rectangle::get_area() 
{ 
    double area = length * width; 
    return area; 
} 
string Rectangle::display_info() 
{ 
    double perimeter = Rectangle::get_perimeter(); 
    double area = Rectangle::get_area(); 
    string s = "The length is " + to_string(length) + "\nThe width is " + to_string(width) + "\nThe perimeter is " + to_string(perimeter) 
    + "\nThe area is " + to_string(area); 
    return s; 
} 

Quelle:

#include "Rectangle.h" 

int main() 
{ 
    Rectangle r1; 
    r1.set_length(5); 
    r1.set_width(4); 
    cout << "r1's info:" << endl; 
    r1.display_info(); 

    cout << endl << endl; 

    Rectangle r2(10, 5); 
    cout << "r2's info:" << endl; 
    r2.display_info(); 

system("pause"); 
return 0; 
} 
+0

Sie haben nichts unternommen, um die von * display_info() * zurückgegebene Zeichenfolge auszugeben. Die Rückgabe eines Strings wird nicht automatisch gedruckt. Sie sind anscheinend mit "cout" vertraut, weil Sie es in der Zeile direkt über dem Aufruf von 'r2.display_info()' verwenden. –

+0

'using namespace std;' im globalen Bereich in einer Kopfzeile, kann leicht zu unbeabsichtigten Namenskollisionen führen. Eine Problemumgehung besteht darin, einen eigenen Namespace zu definieren. –

Antwort

3

Sie bedeutete zu schreiben:

std::cout << r1.display_info(); 

Auch setzen "using namespace std;" in einer Header-Datei is asking for trouble. Tu es nicht.

0

Ihre Methode display_info gibt eine Zeichenfolge mit den Informationen zurück. Es druckt die Information nicht selbst.

Da die Methode "Display Info" genannt wird, gehe ich davon aus, dass sie die tatsächlichen Informationen anzeigen soll, also würde ich vorschlagen, sie zu ändern, um void zurückzugeben. Und ersetzen "Rückkehr s;" mit "std :: cout < < s;"