2017-02-18 36 views
0
#include <bits/stdc++.h> 
using namespace std; 

class contact { 
private: 
    vector< pair<string, int> > contact_info; 
public: 
    void add_contact(string contact_name, int contact_number) { 
     contact_info.push_back(make_pair(contact_name, contact_number)); 
     sort(contact_info.begin(),contact_info.end()); 
    } 
    void edit_contact(string contact_name) { 
     int found_at; 
     for (unsigned int i =0; i < contact_info.size(); i++) { 
      if (contact_info[i].first == contact_name) { 
       found_at = i; 
      } 
    } 
    if (contact_info[found_at +1].first == contact_name) { 
     int choice; 
     int counter = found_at; 
     int index = 1; 
     while (contact_info[counter].first == contact_name) { 
      cout << index << ". " << contact_info[counter].first << " " << contact_info[counter].second; 
      counter++; 
      index++; 
     } 
     cout << "Choose any please: "; 
     cin >> choice; 
     found_at = found_at - (choice - 1); 
    } 
    cout << "Enter the new number: "; 
    cin >> contact_info[found_at].second; 
} 
void show_all() { 
    for (unsigned int i =0; i < contact_info.size(); i++) { 
     cout << contact_info[i].first << " " << contact_info[i].second << endl; 
    } 
} 
void delete_contact(string contact_name) { 
    int found_at; 
    for (unsigned int i =0; i < contact_info.size(); i++) { 
     if (contact_info[i].first == contact_name) { 
      found_at = i; 
     } 
    } 
    if (contact_info[found_at +1].first == contact_name) { 
     int choice; 
     int counter = found_at; 
     int index = 1; 
     while (contact_info[counter].first == contact_name) { 
      cout << index << ". " << contact_info[counter].first << " " << contact_info[counter].second; 
      counter++; 
      index++; 
     } 
     cout << "Choose any please: "; 
     cin >> choice; 
     found_at = found_at - (choice - 1); 
    } 
    contact_info.erase(contact_info.begin()+found_at); 
} 
void writeFile(ofstream contact_file) { 
    for (unsigned int i =0; i < contact_info.size(); i++) { 
     contact_file << contact_info[i].first << " " << contact_info[i].second << endl; 
    } 

} 
void readFile(ifstream contact_file) { 
    string input; 
    while (!contact_file.eof()) { 
    contact_file >> input; 
    size_t pos = input.find(" "); 
    string name = input.substr(0,pos); 
    string number_str = input.substr(pos); 
    int number = stoi(number_str) ; 
    contact_info.push_back(make_pair(name,number)); 
    } 
} 

}; 

int main() 
{ 
    int choice; 
    ifstream contacts_file_read; 
    contacts_file_read.open("contacts.txt"); 
    ofstream contacts_file_write; 
    contacts_file_write.open("contacts.txt"); 
    bool in_prog = true; 
    contact contacts; 
    string name; 
    int number; 
    while (in_prog) { 
    cout << "1. Add contacts" << endl 
     << "2. Edit contact" << endl 
     << "3. Delete contact" << endl 
     << "4. Show all" << endl 
     << "5. exit" << endl; 
    cout << "Your choice: "; 
    cin >> choice; 
    contacts.readFile(contacts_file_read); 
    if (choice == 1) { 
     cout << "Enter name & number separated by a space: "; 
     cin >> name >> number; 
     contacts.add_contact(name, number); 
    } else if (choice == 2) { 
     cout << "Enter name of contacts to be edited: "; 
     cin >> name; 
     contacts.edit_contact(name); 
    } else if (choice == 3) { 
    cout << "Enter name of contact to be deleted: "; 
    cin >> name; 
    contacts.delete_contact(name); 
} else if (choice == 4) { 
    contacts.show_all(); 
} else if(choice == 5) { 
    contacts.writeFile(contacts_file_write); 
} else { 
    cout << "Wrong choice" << endl; 
} 
} 



return 0; 
} 

Итак, меня попросили в своем классе программирования сделать приложение телефонной книги на C++, используя только объекты, так что это моя попытка.Что такое удаленная функция, и почему только мои функции, с которыми я передаю файлы, считаются удалёнными?

Все функции хороши, я перекомпилировал программу после завершения каждой функции, но дал мне 0 ошибок, однако всякий раз, когда я пытаюсь вызвать функцию writeFile или readFile, которые ранее работали нормально, теперь компилятор дал мне ошибку " ошибка: использование удаленных функций ... »

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

Может ли кто-нибудь помочь?

Спасибо.

+0

[ 'а' неправильно (ВФ (!)).] (HTTP: // StackOverflow. ком/вопросы/5605125/почему-это-iostreameof-внутри-а-петля условие считается, неправильно) – chris

ответ

3

Объекты типа std::ifstream не могут быть скопированы - объект представляет собой уникальный дескриптор открытого файла, и было бы сложно концептуализировать то, что он хотел бы скопировать такую ​​уникальную ответственность.

Действительно, эта невозможность копирования объекта закодирована путем удаления конструктора копии, что вызывает ошибку, которую вы видите, когда пытаетесь ее скопировать.

Ваш код должен передать оригинал ifstream, а не копию (принимая ссылочный параметр):

void readFile(ifstream & contact_file) 
//   ^^^^^^^^^^