Textdatei einlesen



  • Hallo!

    Kann mir jemand auf der Suche nach dem Fehler in folgendem Code weiterhelfen? Der Code soll Fließkommazahlen von einer Textdatei abwechselnd in zwei zweidimensionale Arrays einlesen. Das einlesen von Fließkommazahlen in eine Textdatei ist grundsätzlich nicht mein Problem. Ich frage mich nur, was ich bei DIESEM Code falsch gemacht habe. Die zuerst eingelesene Zahl (Variable "number") gibt die Anzahl der einzulesenden Paare pro Array an.

    int readFile(char *filename, double (**pic1)[2], double (**pic2)[2])
    {
        ifstream in(filename);
    
        if (!in) return 0;
    
        int number;
        in >> number;
    
        *pic1=(double (*)[2])malloc(number*sizeof(double[2]));
        *pic2=(double (*)[2])malloc(number*sizeof(double[2]));
        if(!pic1 || !pic2){
          fprintf(stderr, "Memory allocation request failed!\n");
          exit(1);
        }
    
        for (int i=0; i<number; i++) {
    	in >> pic1[i][0] >> pic1[i][1];
    	in >> pic2[i][0] >> pic2[i][1];
        }
        return 1;
    }
    
    int main(int argc, char *argv[])
    {
        double (*pic1)[2], (*pic2)[2];
    
        //...
    
        if (readFile(inputfile, &pic1, &pic2) == 0) {
    	printf("ERROR: Reading error!\n");
    	exit(1);
        }
    }
    

    Und hier die Fehlermeldung:

    g++ -Wall -o task1 task1.cpp                                                                                                 
    task1.cpp: In function ‘int readFile(char*, double (**)[2], double (**)[2])’:                                                
    task1.cpp:28: error: no match for ‘operator>>’ in ‘in >> *(*(pic1 + ((unsigned int)(((unsigned int)i) * 4u))))’              
    /usr/lib/gcc/i586-manbo-linux-gnu/4.3.2/../../../../include/c++/4.3.2/istream:123: note: candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>& (*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    


  • pic1[i][0] is still an array. It is not a double .

    I think, the correct syntax will be: (*pic1)[i][0] .



  • Verwende in C++ besser std::vector<double> und du brauchst dich dann auch um die Speicherallokation nicht selber zu kümmern.


Anmelden zum Antworten