Ошибка Getline - «не удалось вывести аргумент шаблона» - PullRequest
1 голос
/ 16 февраля 2012

Это действительно простая программа, и я не знаю, в чем я ошибся. Я посмотрел онлайн и не смог найти ничего полезного. Что-то не так с моим getline (cin, movieName), но я не знаю что.

//This program will calculate a theater's revenue from a specific movie.
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;

int main ()
{
    const float APRICE = 6.00,
                CPRICE = 3.00;

    int movieName,
        aSold,
        cSold,
        gRev,
        nRev,
        dFee;

    cout << "Movie title: ";
    getline(cin, movieName);
    cout << "Adult tickets sold: ";
    cin.ignore();
    cin >> aSold;
    cout << "Child tickets sold: ";
    cin >> cSold;

    gRev = (aSold * APRICE) + (cSold * CPRICE);
    nRev = gRev/5.0;
    dFee = gRev - nRev;

    cout << fixed << showpoint << setprecision(2);
    cout << "Movie title:" << setw(48) << movieName << endl;
    cout << "Number of adult tickets sold:" << setw(31) << aSold << endl;
    cout << "Number of child tickets sold:" <<setw(31) << cSold << endl;
    cout << "Gross revenue:" << setw(36) << "$" << setw(10) << gRev << endl;
    cout << "Distributor fee:" << setw(34) << "$" << setw(10) << dFee << endl;
    cout << "Net revenue:" << setw(38) << "$" << setw(10) << nRev << endl;

    return 0;
}

И вот ошибки, которые я получаю:

 error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'int' see declaration of 'std::getline'

error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : expects 3 arguments - 2 provided
 see declaration of 'std::getline'

error C2784: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &&,std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_string<_Elem,_Traits,_Alloc> &' from 'int'
 see declaration of 'std::getline'

error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &&,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : expects 3 arguments - 2 provided
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\string(395) : see declaration of 'std::getline'

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Проблема здесь в том, что getline требует std::string (или некоторый другой тип basic_string) в качестве аргумента, а вы предоставляете int. Как я упомянул в моем ответе на ваш предыдущий вопрос , вы должны поменять тип movieName на std::string. Вам также следует соответствующим образом изменить тип других переменных (они, вероятно, должны быть float с, если вы умножаете другие значения на float с), и я бы предложил перенести определения вниз на main, где они на самом деле используются.

Надеюсь, это поможет!

0 голосов
/ 16 февраля 2012

Первое, что я вижу, - movieName объявляется как целое число вместо строки или массива char (строка C). Это, кажется, главная проблема, вызывающая множество ошибок в отношении getline.

...