Ошибка: ни один экземпляр перегруженной функции "std :: getline" не соответствует списку аргументов - типы аргументов: (std :: istream, char [50]) - PullRequest
0 голосов
/ 25 апреля 2020

Совершенно новый (по состоянию на десять минут go) переполнение стека и (около недели в) c ++, но я работаю над тем, чтобы найти систему управления библиотекой, которую я нашел в Интернете, чтобы посмотреть, как работают классы. Я нашел оригинальный код здесь: https://www.icbse.com/projects/c-project-on-library-management-2g и пытаюсь выяснить, как заставить его работать. Некоторые заголовки устарели, поэтому я обновил их и внес изменения по мере необходимости. Столкнулся с проблемой с get () и увидел, что кто-то здесь сказал, что это плохая практика / небезопасно, поэтому я изменил все эти ссылки на ' std :: getline '. Тем не менее, теперь у меня есть проблема, которую я не смог решить, почему мой отладчик имеет загогулину под std. Я получаю 'ни один экземпляр перегруженной функции "std :: getline" не соответствует списку аргументов - типы аргументов: (std :: istream, char [50])'. Я не уверен, как решить эту проблему. Любая помощь будет оценена.

#include<iostream>
#include<fstream>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<string.h>
#include<iomanip>
#include<string>

using namespace std;
using std::cout;
using std::getline;

class book
{
    char bno[6];
    char bname[50];
    char aname[20];
  public:
    void create_book()
    {
        cout<<"\nNEW BOOK ENTRY...\n";
        cout<<"\nEnter The book no.";
        cin>>bno;
        cout<<"\n\nEnter The Name of The Book ";
        std::getline(std::cin, bname);
        cout<<"\n\nEnter The Author's Name ";
        std::getline(std::cin,aname);
        cout<<"\n\n\nBook Created..";
    }

    void show_book()
    {
        cout<<"\nBook no. : "<<bno;
        cout<<"\nBook Name : ";
        puts(bname);
        cout<<"Author Name : ";
        puts(aname);
    }

    void modify_book()
    {
        cout<<"\nBook no. : "<<bno;
        cout<<"\nModify Book Name : ";
        std::getline(std::cin,bname);
        cout<<"\nModify Author's Name of Book : ";
        std::getline(std::cin,aname);
    }

    char* retbno()
    {
        return bno;
    }

    void report()
    {cout<<bno<<setw(30)<<bname<<setw(30)<<aname<<endl;}


};

1 Ответ

1 голос
/ 25 апреля 2020

std::getline(std::cin, bname); -> std::cin.getline(bname, 50);.

Глобальная функция std::getline() работает только с типом std::basic_string. Функция-член getline() работает только с char[].

Или вы можете избавить себя от будущих проблем и изменить char[] на std::string. В целом гораздо проще в использовании.


Имейте в виду, что смешивание getline() и >> проблематично c.

...