2009-10-17 6 views
1

je reçois les erreurs suivantes lorsque je tente de construire ce projet:Besoin d'aide avec trois erreurs de visual studio - erreurs C++ se produisant en essayant de construire une solution

error C2182: 'read_data':illegal use of type 'void' 
error C2078: too many initializers 
errors c2440: 'initializing': cannot convert from 'std::ofstream' to int 

Toutes ces semblent pointer vers ma fonction appelez sur la ligne 72, qui est cette ligne: void read_data (finput, foutput);

J'ai recherché ces codes d'erreur sur le site MSDN mais n'a pas pu utiliser la description pour en déduire ce qui pourrait ne pas être correct.

Toutes les idées/conseils sont appréciés.

#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <string> 
using namespace std; 

void read_data(ifstream& finput, ofstream& foutput); 
//PRE: The address of the ifstream & ofstream objects is passed to the function 
//POST: The data values are read in until the end of the file is reached 

void print_data(ofstream& foutput, string fname, string lname, int largest, int smallest); 
//PRE: The address of the ofstream object and the values of fname, lname and largest and smallest integer 
//  in each row is passed to the function 
//POST: The values are outpur to the file with formatting 

int max(int num1, int num2, int num3, int num4); 
//PRE: Four integer values are passed to the function 
//POST: The largest of the four integer values is returned 

int min(int num1, int num2, int num3, int num4); 
//PRE: Four integer values are passed to the function 
//POST: The smallest of the four integer values is returned 

int main() 
{ 
    //Declare the filestream objects 
    ifstream finput; 
    ofstream foutput; 

    //Attempt to open the input & output files 
    //In each case, print an error message and quit if they fail to open 
    finput.open("program4_input.txt"); 
    if (finput.fail()) 
    { 
     cout <<"The input file failed to open!" << endl; 
     return exit(1); 
    } 

    foutput.open("output.txt"); 
    if (foutput.fail()) 
    { 
     cout <<"The output file failed to open!" << endl; 
     return exit(2); 
    } 

    void read_data(finput, foutput); 

    return 0; 
} 


//Function definitions 
void read_data(ifstream& finput, ofstream& foutput) 
{ 
    string fname, lname; 
    int num1, num2, num3, num4, largest, smallest; 

    while(finput >> fname) 
    { 
     finput >> lname >> num1 >> num2 >> num3 >> num4; 
     largest = max(num1, num2, num3, num4); 
     smallest = min(num1, num2, num3, num4); 

     print_data(foutput, fname, lname, largest, smallest); 


    } 

} 

void print_data(ofstream& foutput, string fname, string lname, int largest, int smallest) 
{ 
    foutput << setw(15) << fname << setw(15) << lname << setw(10) << largest << setw(10) << smallest 
      << endl; 
} 

int max(int num1, int num2, int num3, int num4) 
{ 
    int lnum, lnum1, lnum2; 

    if (num1 > num2) 
    { 
     lnum1 = num1; 
    } 
    else 
     lnum1 = num2; 


    if (num3 > num4) 
    { 
     lnum2 = num3; 
    } 
    else 
     lnum2 = num4; 


    if (lnum1 > lnum2) 
    { 
     lnum = lnum1; 
    } 
    else 
     lnum = lnum2; 

    return lnum; 
} 


int min(int num1, int num2, int num3, int num4) 
{ 
    int snum, snum1, snum2; 

    if (num1 < num2) 
    { 
     snum1 = num1; 
    } 
    else 
     snum1 = num2; 


    if (num3 > num4) 
    { 
     snum2 = num3; 
    } 
    else 
     snum2 = num4; 


    if (snum1 > snum2) 
    { 
     snum = snum1; 
    } 
    else 
     snum = snum2; 

    return snum; 
} 

Répondre

6

Oui, le problème est la ligne

void read_data(finput, foutput); 

dans la fonction principale. Ne pas spécifier le type de retour lorsque appelant la fonction. Seulement lors de la déclaration. En d'autres termes, la ligne doit simplement lire

read_data(finput, foutput); 
+0

arrghhh je vois i. Je ne peux pas croire que je l'ai regardé pendant 30 minutes et n'a pas vu l'événement. Je me sens stupide. Je vous remercie! – noobzilla

+0

obijuan, si c'est la solution, vous devriez accepter la réponse. – sbi

1

Vous avez vide avant votre appel qui est la signature de la fonction - vous n'êtes pas vraiment l'appeler ce qui explique pourquoi le compilateur se plaint.

+0

Merci maggie. Mon garçon, est-ce que je me sens bête? – noobzilla

+1

Ne vous sentez pas stupide - il est si facile de rater des erreurs - mieux vaut demander puis tourner vos roues :) – Maggie

Questions connexes