2009-10-01 10 views
0

Je continue d'obtenir les mêmes erreurs sur mon programme, toute aide serait grandement appréciée.C++ erreur, "n'a pas pu en déduire l'argument pour 'std ..."

erreur 1 Erreur C2784: « std :: basic_istream < _Elem, _Traits> & std :: getline (std :: basic_istream < _Elem, _Traits> &, std :: basic_string < _Elem, _Traits, _Alloc > &) »: ne pouvait pas déduire argument modèle pour 'std :: basic_string < _Elem, _Traits, _Alloc> &' de 'c char': \ Users \ esmier \ Documents \ Visual studio 2008 \ Projects \ Chapitre 4 laboratoire \ Chapitre 4 lab \ source.cpp 40 Chapitre 4 lab

Erreur 2 Erreur C2780: « std :: basic_istream < _Elem, _Traits> & std :: getline (std :: basic_istream < _Elem, _Traits> &, std :: basic_string < _Elem, _Traits, _Alloc> &, const _Elem) »: 3 prévoit arguments - 2 fournis c: \ Users \ esmier \ Documents \ Visual studio 2008 \ Projects \ Chapitre 4 laboratoire \ Chapitre 4 laboratoire \ source.cpp 40 Chapitre 4 laboratoire

là des erreurs également se produire dans la section commentée comme cas b

#include <iostream> 
#include<sstream> 
int main() 
{ 
double hours; 
double Package_A_price=9.95, Package_A_hours=10, Package_A_additional=2.00,Package_A_total; 
double Package_B_price=14.95, Package_B_hours=20, Package_B_additional=1.00,Package_B_total; 
double Package_C_price=19.95; 
char package_choice, additional_hours[3]; 

//table output 

cout<<"Please choose your package below"; 

cout<<"Package A:\t"<<"For $9.95 per month 10 hours of service are provided.\n"; 
cout<<"\t\tAdditional hours are $2.00 per hour\n\n"; 

cout<<"Package B:\t"<<"For $14.95 per month 20 hours of service are provided.\n"; 
cout<<"\t\tAdditional hours are $1.00 per hour\n\n"; 

cout<<"Package A:\t"<<"For $19.95 per month unlimited access is provided.\n\n\n"; 

cout<<"What is your package letter?\n"; 
cin>>package_choice; 
while (package_choice!='A'||'a'||'B'||'b'||'C'||'c') 
{ 
    cout<<"You entered an incorrect option.\n"; 
    cout<<"please reenter your choice.\n\n"; 
} 
switch (package_choice) 
{ 
//package A choice 
case 'A||a': 
    cout<<"Did you have any additional hours?\n"; 
    getline(cin, additional_hours); 
    if (additional_hours == 'yes') 
    { 
     cout<<"How many hours did you have?\n"; 
     cin>>hours; 
     while (hours >744) 
     { 
      cout<<"You can not have over 744 hours per month!\n"; 
      cout<<"Time is a linear constant, Please renter your amount.\n"; 
     } 
     Package_A_total=9.95+(2.00*hours); 
     cout<<"Your Total for Package A is $"<<Package_A_total; 
     break; 
    } 
//package B choice 
case 'B||b': 
    cout<<"Did you have any additional hours?\n"; 
    getline(cin, additional_hours); 
    if (additional_hours == 'yes') 
    { 
     cout<<"How many hours did you have?\n"; 
     cin>>hours; 
     while (hours >744) 
     { 
      cout<<"You can not have over 744 hours per month!\n"; 
      cout<<"Time is a linear constant, Please renter your amount.\n"; 
     } 
     Package_B_total=14.95+(1.00*hours); 
     cout<<"Your Total for Package B is $"<<Package_B_total; 
     break; 
    } 
//package C choice 
case 'C||c': 
    cout<<"Your Total for Package C is $"<<Package_B_price; 
    break; 

default: cout<<"You did not Enter A B or C.\n"; 
     cout<<"Please reenter your choice."; 
} 



system ("pause"); 
    return 0; 

}

Répondre

0

Je vois un défaut déjà votre boucle while ne marche pas remis à zéro le package_choice:

while (package_choice!='A','a','B','b','C','c'){  
     cout<<"You entered an incorrect option.\n";   
     cout<<"please reenter your choice.\n\n"; 
} 

Vous devez cin >> nouveau le choix de l'emballage.

+0

dans une boucle tandis que la variable peut être avant l'instruction –

0

Il ne semble pas qu'il aime ce que vous passez à getline. Essayez de déclarer additional_hours comme std::string.

5

additional_hours est déclaré un caractère un tableau de 3 caractères. Cette forme de getline s'attend à ce que vous utilisiez std :: string (une autre forme pour C-style char* est la fonction membre de cin).

Il existe de nombreuses autres erreurs, apparemment de vous ne sachant pas que omble signifie un seul caractère:

case 'A||a': 
if (additional_hours == 'yes') 

Les constantes utilisent de caractères multi-octets. Fondamentalement, cela ne signifie simplement pas ce que vous attendez du tout (c'est un nombre unique codé en caractères ASCII ou quelque chose comme ça).

while (package_choice!='A','a','B','b','C','c') 

Encore une fois ce n'est pas comment vous comparer plusieurs conditions, que vous devez combiner avec logique et et ou (& & et ||). Comme il est, il utilise l'opérateur de virgule qui signifie évaluer tous les opérandes et utiliser le dernier ('c') comme résultat.

En outre, la fonction tolower ou toupper dans <cctype> pourrait vous aider.L'activation des avertissements du compilateur (-Wall with GCC) peut révéler toutes ces erreurs: [Warning] constante de caractère multi-caractères, [Warning] l'opérande gauche de virgule n'a aucun effet, [Warning] la valeur d'étiquette de cas dépasse le maximum valeur pour le type, [Attention] la comparaison est toujours fausse en raison d'une plage limitée de type de données. Edit: Maintenant que vous avez déclaré additional_hours comme tableau de caractères, sachez que 3 caractères ne suffisent pas à stocker la chaîne "oui" car il n'y a pas de place pour le caractère nul-terminateur. Il vaut mieux utiliser la classe std :: string.

+0

heures supplémentaires est défini pour prendre 3 lettres si vous regardez la description de la variable –

+0

Correction de cela. Cependant, asker a modifié le code d'origine: char package_choice, additional_hours (3); – UncleBens

0

Utilisez std::cout ou std::cin ou std::cin.getline(..) au lieu de ce que vous utilisez.

Utilisation std::cin.get() au lieu de system("pause") pour tenir votre écran

+1

ou simplement ajouter "using namespace std;" avant votre fonction principale car tous les identifiants globaux de la bibliothèque Standard C++ sont définis dans l'espace de noms "std" –

+0

yes sorry using namespace std; est-ce que j'ai juste échoué à le copier –

0

essayez ceci:

cin.getline(additional_hour, 3) 
Questions connexes