2016-09-06 4 views
-1

Ich habe an diesem Projekt für meine C++ - Klasse gearbeitet, in der ich eine Sammlung von Informationen vom Benutzer erhalten muss, einschließlich des Geburtsjahres und des aktuellen Jahres (wir müssen noch lernen, wie man auf das Datum des Computers zugreift) muss manuell abgerufen werden). Ich bin noch ziemlich früh in dem Prozess und ich bin auf dieses Hindernis gestoßen, das ich nicht funktionieren kann.C++ getline wird nicht mit int arbeiten?

Während ich diesen Prozess verwendet habe, um einfach das Namensystem mit der benutzerdefinierten Klasse zu arbeiten, kann ich es nicht für den Jahreswert arbeiten. Ich kann nur davon ausgehen, dass das Jahr eher ein Int als ein String ist, aber ich kann unmöglich einen anderen Weg finden, dies zum Laufen zu bringen. Könnte sich jemand bitte diesen Code ansehen und mir helfen herauszufinden, worum es geht?

Hauptklasse:

#include <iostream> 
#include <string> 
#include "Heartrates.h" 

using namespace std; 

int main() { 
    Heartrates myHeartrate; 
     cout << "Please enter your name (First and Last): "; 
     string yourName; 
     getline (cin, yourName); 
     myHeartrate.setName(yourName); 

cout << "\nPlease enter the current year: "; 
int currentYear; 
getline (cin, currentYear); 
myHeartrate.setCyear(currentYear); 


cout << "\nYou entered " << currentYear; 
} 

Herzfrequenz Klasse:

#include <string> //enables string use 

class Heartrates { 
public: 
    void setName(std::string yourName) { 
    name = yourName; 
} 

std::string getName() const { 
    return name; 
} 

void setCyear(int currentYear) { 
    Cyear = currentYear; 
} 

int getCyear() const { 
    return Cyear; 
} 

private: 
    std::string name; 
    int Cyear{ 0 }; 
}; 

ich in einen Fehler am Laufen halten, die dort heißt es ist keine passende Überlastfunktion gefunden, aber wie Sie sehen, ich bin mit der gleiche Struktur zwischen der Hauptklasse und dem Header und der Name funktionierte gut.

+2

[ 'std :: getline()'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) funktioniert nicht mit 'int', ja. Verwenden Sie 'std :: getline()' mit 'std :: string' und' std :: istringstream' in einem zweiten Schritt. –

Antwort

0

Die Version von std :: getline, die Sie dort verwenden möchten, akzeptiert kein int als Argument. Siehe die mit 2 (C++ 11) markierte Funktion für die Funktion, die Sie versuchen, here aufzurufen. std :: istringstream kann von sstream eingebunden werden. Ich würde eine std :: endl (oder neue Zeile) zum endgültigen Ausdruck hinzufügen, um es auch schöner zu machen.

#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 

int main() { 
    Heartrates myHeartrate; 
    cout << "Please enter your name (First and Last): "; 

    // read line 
    string line; 
    getline (cin, line); 
    // line is yourName 
    myHeartrate.setName(line); 
    // read line, read int from line 
    cout << "\nPlease enter the current year: "; 
    int currentYear; 
    getline (cin, line); 
    std::istringstream ss(line); 
    ss >> currentYear; 
    myHeartrate.setCyear(currentYear); 

    cout << "\nYou entered " << currentYear << endl; 
    return 0; 
} 
+0

Vielen Dank für die Hilfe! Ich hätte das nie alleine herausgefunden, mein Lehrbuch hat noch nicht einmal erwähnt. –

+0

Oder Sie können einfach 'cin >> currentYear' verwenden und' istringstream' überhaupt nicht verwenden. Vergessen Sie auch nicht, dass '>>' (in einem beliebigen Stream) fehlschlagen kann. Daher sollten Sie vor der Verwendung von Werten nach Fehlern suchen (z. B. nach einer fehlerhaften Benutzereingabe). –