• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

g++ compiler fehler?

Kain88

Jonagold
Registriert
31.03.08
Beiträge
21
Hi

Ich wollte ein paar Funktionen schreiben die mir für daten aus einer verschiedene Berechnungen durchführen. Dafür versuche ich gerade die txt datei in ein mehrdimensionales array zuschreiben. Unten habe ich meinen Programm code und die Fehler ausgabe eingefügt.

Der Fehler liegt glaube ich darin das ich das multi dimensionale Array ohne weitere angaben nur mit dem Pointer auf das 0-te Element übergeben will. Nach allem was ich bei google finde liegt der Fehler beim compiler.

Ich würde gerne wissen wie ich es hinbekomme ein beliebiges 2-dimensionales Array aus einer txt datei einzulesen

dummy.dat
Code:
1 1 1
2 2 1
3 3 1
...
C++ Code
Code:
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

int anzahlderzeilen(const string&);
int anzahlderspalten(const string&);
void einlesen(const string&, int*);

//Fkt zum bestimmen der anzahl der zeilen
int anzahlderzeilen(const string& datei){
    fstream werte;
    char cstring[256];
    werte.open(datei.c_str(), ios::in);
    int i = 0;
    for(;!werte.eof(); i++){
        werte.getline(cstring, sizeof(cstring));
    }
    werte.close();
    return i;
}

//Fkt zum bestimmen der anzahl der spalten
int anzahlderspalten(const string& datei){
    fstream werte;
    char cstring[256];
    werte.open(datei.c_str(), ios::in);
    werte.getline(cstring, sizeof(cstring));
    string::size_type pos;
    int letzteleerstelle = 0; //Zeigt auf die letze gefundene Leerstelle
    int anzahlleerstellen = 0; //Wollen wir haben
    string einezeile = cstring;
    do{
        pos = (int) einezeile.find_first_of("\t ,",letzteleerstelle);
        letzteleerstelle = (int)pos + 1;
        anzahlleerstellen++;
    }while(pos!=string::npos);
    return anzahlleerstellen;
}

//Einlesen der Daten ins Array
void einlesen(const string& datei, int **array){
    int numberoflines = anzahlderzeilen(datei);
    int numberofcolumns = anzahlderspalten(datei);
    fstream werte;
    std::string eine;
    char cstring[256];
    werte.open(datei.c_str(), ios::in);
    for(int i = 0;!werte.eof(); i++){
        werte.getline(cstring, sizeof(cstring));
        eine = cstring;
        stringstream zeile(eine);
        
        for (int n = 0; n < numberofcolumns; n++){
            zeile >> array[i][n];
            cout << array[i][n] << " ";
        }
        cout << endl;
    }
}


int main(){
string datei ="dummy.dat";
int numberoflines = anzahlderzeilen(datei);
int numberofcolumns = anzahlderspalten(datei);
cout << numberoflines << " ";
cout << numberofcolumns << endl;
int daten[numberoflines][numberofcolumns];
einlesen(datei,(int*)daten);
cout << daten[1][1] << endl;
}
g++ fehler ausgabe
Code:
Undefined symbols:
  "einlesen(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int*)", referenced from:
      _main in cc1OAqmD.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Du hast einlesen als
Code:
void einlesen(const string&, int*)
deklariert, und als
Code:
void einlesen(const string&, int**)
implementiert.

"Two men say they're Jesus: One of them must be wrong"

Alex
 

Kain88

Jonagold
Registriert
31.03.08
Beiträge
21
Ah danke, jetzt komiliert er.
Ich bekomme leider nun nen Bus error. Schade
Für beliebige 2d Arrays werde ich wohl nicht drum rum kommen noch ein paar Schleifen einzufügen.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ja, ich habe mich gerade nur um die offensichtlichen Fehler gekümmert, für mehr fehlt grad die Zeit.

Alex