2014-08-30 3 views
0

Un programme simple vous dit combien de lait coûte ce que je ne comprends pas pourquoi je reçois cette erreur "pas de correspondance pour 'opérateur >>' dans 'std :: cin ??" Im un débutant au C++ mais encore ce que l'enfer.aucune correspondance pour 'operator >>' dans 'std :: cin?

aussi cette erreur: "Dans la fonction 'int main()':"

#include <iostream> 
using namespace std; 
/* run this program using the console pauser or add your own getch, system("pause") or  input loop */ 

const double CARTONLOAD = 3.78; 
const double CARTONCOST = 3.78 * .38; 
const double CARTONPROFIT = 0.27; 

int main() 
{ 
    double totalmilk = 0; 
    double milkcartonsneeded = 0; 
    double milkcost = 0; 

    cout << "Enter total amount of milk produced in the morning in Liters" << endl; 
    cin >> totalmilk >> endl; 
    milkcartonsneeded = totalmilk/CARTONLOAD; 
    cout << " Number of milk cartons needed to hold milk: " << milkcartonsneeded << endl; 
    milkcost = milkcartonsneeded * CARTONCOST; 
    cout << " The cost of producing milk is: " << milkcost << endl; 
    cout << " The profit for producing milk is: " << milkcartonsneeded * CARTONPROFIT - milkcost << endl; 

    return 0; 
} 

Répondre

4

Ce problème est le

cin >> totalmilk >> endl; 

Il donne l'erreur en raison de endl. Retirez-le.

7

endl est un manipulateur de flux de sortie. cin est un flux d'entrée. Je ne sais pas ce que vous attendez endl à faire ici:

cin >> totalmilk >> endl; 

Mais il est faux.

+0

Je pensais que endl est nouvelle ligne lol –

+1

@ user3542679: C'est correct. Cela entraîne la sortie d'une nouvelle ligne (en plus d'autres choses). Mais 'cin' ne produit rien. C'est le travail de 'cout'. –

1

operator<< a une surcharge qui prend un pointeur de fonction à une fonction qui reçoit un std::basic_ostream. Cela vous permet d'utiliser des "manipulateurs de flux", c'est-à-dire std::endl, dans une chaîne operator<<. Cela vous permet de faire ce qui suit par exemple:

std::cout << "hey."; 
std::endl(std::cout); 
std::cout << "hello."; 

Parce que std::endl est juste une fonction qui prend une std::basic_ostream. Cependant, il renvoie également un par référence (similaire à operator<<), ce qui signifie qu'il peut apparaître dans une chaîne, c'est-à-dire std::cout << std::endl.

Depuis std::cin est un std::basic_istream, vous avez des arguments incompatibles.

+0

Le compilateur n'essaie jamais de résoudre l'appel 'std :: endl (std :: cin)'. L'OP utilise 'operator >>' (pas 'operator <<'), et il n'y a pas de surcharge qui fonctionnera pour 'std :: endl'. –

Questions connexes