2014-10-25 2 views
0

Я очень новичок в Cpp, и у меня есть некоторые проблемы, объявляющие входные потоки. Я продолжаю получать ошибку: «ошибка: нет соответствия для« operator >> »в« std :: cin >> new_contact.Person :: Name », в дополнение к целому числу других вещей, которые все связаны с неправильным использованием >> оператор он выглядит. Вот код, а также структура для каждого из структур используется.Проблема C++ с операторами потоков

#include <iostream> 
#include <map> 
#include <string> 
#include <vector> 
using std::string; 
using std::vector; 
using std::endl; 
using std::map; 
using std::cout; 
using std::cin; 

typedef struct { 
    string Name; 
    map<string,int> Number; 
} Person; 

void addContact(vector<Person> Contacts) { 
    Person new_contact; 
    char ans; 
    string name; 
    cout << "What is the name of your new contact (first name)? " << endl; 
    cin >> new_contact.Name; 
    cout << "Do you want to enter a number for your contact? " << endl; 
    cin >> ans; 
    while (ans == 'y') { 
     cout << "What type of number are you entering? " << endl; //ex CELL, FAX, HOME, WORK, etc. 
     cin >> name; 
     cout << "What is the number of your contact? " << endl; 
     cin >> new_contact.Number[name]; 
     cout << "do you want to enter another number? " << endl; 
     cin >> ans; 
    } 
    Contacts.push_back(new_contact); 
} 

Пожалуйста, дайте мне знать, где я неправильно, как я не вижу никаких вопиющих вопросов, когда сравнивая то, что у меня было с предыдущими ошибками, с которыми сталкиваются люди (большинство людей, испытывающих эту проблему, похоже, ставят команду endl в конце потока cin, однако я этого не делал). Спасибо заранее!

EDIT: Теперь я застрял с бесконечным циклом, пытаясь перепроверить «ans» vari возможность. Функция просто бесконечно проходит через чередующиеся «Вы хотите ввести еще один nummber?» и «Какой тип номера вы вводите?» без ввода от меня.

+0

Вы, вероятно, обнаружить в какой-то момент, что функция не имеет никакого эффекта, так как он работает только на локальной переменной и не вызывает никаких побочных эффектов (кроме потребления входных данных). Вы также обнаружите, что ваши лица не могут иметь места на своем имени. –

ответ

2

cin >> new_contact.Name требует перегрузки operator>> для vector<char>, которого не требуется.

Самым простым способом исправить это изменить тип Name члена:

string Name; 
+0

Awesome; который работал на 100%. Почему именно это не работает? Я понимаю перегрузку оператора >>, но использует ли вектор оператор >> для чего-нибудь? Сожалею; очень новый для cpp! Кроме того, я столкнусь с тем же вопросом, который пытается импортировать из потока в карту? – Rich

+0

@ Эрик: Просто никто не определил 'operator >>' for 'vector '. Нет никого, и, вероятно, нет разумной семантики, которую вы могли бы дать такому оператору, который был бы полезен. –

+0

спасибо за вашу помощь, я ценю это! Как примечание, знаете ли вы, как я могу очистить его, чтобы я мог заполнить его новыми данными? Похоже, на данный момент я не могу изменить его содержимое, и я столкнулся с бесконечным циклом. – Rich

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