2016-09-06 5 views
-1

Я работаю над этим проектом для своего класса C++, в котором мне нужно получить сбор информации от пользователя, включая пользователей, родившихся в этом году и в текущем году (нам еще предстоит узнать, как получить доступ к дате компьютера, чтобы она должен быть извлечен вручную). Я все еще довольно рано в процессе, и я столкнулся с этим препятствием, с которым я не могу работать.C++ getline не будет работать с int?

Хотя я использовал этот процесс, чтобы легко заставить систему имен работать с использованием пользовательского класса, я не могу заставить его работать для значения года. Я могу только предположить, что проблема заключается в том, что год - это int, а не строка, но я не могу понять, каким способом заставить это работать. Может ли кто-нибудь посмотреть этот код и помочь мне разобраться, в чем проблема?

Основной класс:

#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; 
} 

HeartRate класс:

#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 }; 
}; 

я продолжать работать в заблуждение, что государства не существует функция перегрузки соответствие найдено, но, как вы можете видеть, Я использую та же структура между основным классом и заголовком, и имя работало просто отлично.

+2

[ 'станд :: GetLine()'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) не работает с 'int', да. На втором этапе используйте 'std :: getline()' с 'std :: string' и' std :: istringstream'. –

ответ

0

Версия std :: getline, которую вы пытаетесь использовать там, не принимает значение int в качестве аргумента. См. Функцию с пометкой 2 (C++ 11) для функции, которую вы пытаетесь вызвать here. std :: istringstream может быть включен из sstream. Я бы добавил std :: endl (или новую строку) к окончательной распечатке, чтобы сделать ее более приятной.

#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

Большое спасибо за помощь! Я никогда бы не подумал об этом сам, мой учебник еще не упомянул о нем. –

+0

Или вы можете просто использовать 'cin >> currentYear', а не использовать' istringstream' вообще. Кроме того, не забывайте, что '>>' (в любом потоке) может выйти из строя, поэтому перед использованием значений вы должны проверить наличие ошибок (например, неправильный ввод пользователя). –

 Смежные вопросы

  • Нет связанных вопросов^_^