Что я должен изменить или удалить, чтобы исправить этот код, чтобы все остальное работало нормально? - PullRequest
0 голосов
/ 18 ноября 2018
#include <h1>iostream <h2> 
#include <h1>cmath<h2>// for + of months, days, and years
#include <h1>fstream<h2> //for in and output
#include <h1>cstdlib<h2>
#include <h1>string<h2>//for string type

using namespace std;
class Device {//Input and store Device Description and Serial Numbers
protected:
    string  serial_number;
    string device_description;
public:
    Device() {
        serial_number = ("6DCMQ32");
        device_description = ("TheDell");
    }
    Device(string s, string d) {
        serial_number = s;
        device_description = d;
    }
};
class Test {
protected:
    string Test_Description;
    static int recent_month, recent_day, recent_year, new_month;
    static int nmonth, next_month, next_day, next_year, max_day;
public:
    static void getMonth() {//Calculates the next/new month
        next_month = recent_month + nmonth;
        new_month = next_month % 12;
        if (next_month >= 12) {
            cout << "The next Date: " << new_month << " / ";
        }
        else {
            cout << "The next Date: " << next_month << " / ";
        }
    }
    static void getDay() {  //Calculates day of next month
        if (new_month == 4 || new_month == 6 || new_month == 9 || new_month == 11) {
            max_day = 30;
        }
        else if (new_month == 2) {
            max_day = 29;
        }
        else {
            max_day = 31;
        }
        if (recent_day > max_day) {
            cout << max_day << " / ";
        }
        else {
            cout << recent_day << " / ";
        }
    }
    static void getYear() {//Calculates the year of the next number of months
        next_year = recent_year + next_month;
        if (next_year >= 12) {
            cout << recent_year + (next_month / 12) << endl;
        }
        else {
            cout << next_year << endl;
        }
    }
    static void getDate() {
        Test::getMonth(), Test::getDay(), Test::getYear();
    }
};
int Test::recent_month, Test::recent_day, Test::recent_year, 
Test::new_month;
int Test::nmonth, Test::next_month, Test::next_day, Test::next_year, 
Test::max_day;
class Lab : public Device, public Test {//Class Lab is a Child of Class Test and Class Device
protected:
    static int n;
public:
    friend istream & operator>>(istream & cin, const Lab & lab) {
        cout << "Enter Device Description and serial number: ";
        getline(cin, lab.device_description);//This is where the error is
        getline(cin, lab.serial_number);//This is where the error is
        cout << "Enter Test Description: ";
        getline(cin, lab.Test_Description);//This is where the error is
        cout << "Enter number of months: ";
        cin >> lab.nmonth;
        cout << "Enter the most recent date(mm/dd/yyyy): ";
        cin >> lab.recent_month >> lab.recent_day >> lab.recent_year;
        return cin;
    }
    friend ostream & operator<<(ostream & cout, const Lab & lab) {
        cout << lab.device_description << " ";
        cout << lab.serial_number << endl;
        cout << lab.Test_Description << endl;
        getDate();
        return cout;
   }
   static void getFile() {
       cout << "Enter the number of devices: ";
       cin >> n;
       Lab *obj = new Lab[n];
       if (obj == 0) {
           cout << "Memory Error";
           exit(1);
       }
       for (int i = 0; i<n; i++) {
           cin >> obj[i];
       }
       ofstream myfile("Device.dat", ios::binary);
       myfile.write((char *)obj, n * sizeof(Lab));
       Lab *obj2 = new Lab[n];
       ifstream file2("Device.dat", ios::binary);
       if (obj2 == 0) {
           cout << "Memory Error";
           exit(1);
       }
       file2.read((char *)obj2, n * sizeof(Lab));
       for (int i = 0; i < n; i++) {
           cout << obj2[i];
           cout << endl;
       }
       delete[] obj2;
    }
    void getSearch(){

    }
 };
 void main() {
     Lab L;
     L.getFile();
     system("pause");
 }

// Ошибка C2665 'std :: getline': ни одна из двух перегрузок не может преобразовать все типы аргументов

/ * Цель: ввести количество месяцев для следующей даты тестирования устройства с вводом серийного номера, описания устройства, описания теста, недавней даты и количества месяцев двух испытаний. В конце необходимо выполнить поиск программы, попросив пользователя ввести серийный номер и следующую дату, если эти два значения действительны, все в устройстве перечислено. * / <</p>

1 Ответ

0 голосов
/ 18 ноября 2018

Вы не должны называть свои параметры как объекты стандартной библиотеки (cin).

Чтобы аргумент был изменяемым, он не должен быть ссылкой на константу.

Кроме того, перегрузка std::istream bound operator<<() не должна выводить, а только извлекать объекттребуется из потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...