Klasse in Unterprogramm mit Werte füllen



  • Hallo,

    programmiere erst seit kurzem mit c++. Habe folgendes Problem:
    Habe eine Klasse definiert. Im Hauptprogramm erstelle ich eine Instanz
    dieser Klasse.
    In einem Unterprogramm will ich nun die Instanz mit Werten füllen. Der
    Compiler liefert folgende
    Fehlermeldung mit der ich nicht viel Anfangen kann:
    no match for `c_knoten& [int&]' operator. (Hab ihn nochmal an die Zeile
    geschrieben wo der Fehler auftritt...)

    Hier der Code:

    // Globale Variabeln
    int g_AnzKnoten=0;
    int g_AnzElemente=0;
    c_knoten testa; //c_knoten ist die Klasse, testa die Instanz

    // Begin Hauptprogramm
    main(int argc, char *argv[])
    {
    ...
    //Jetzt kann eine instanz der Knoten erschaffen werden

    testa[g_AnzKnoten+1]; //Instanz für Knoten erschaffen
    for (i=1;i<=g_AnzKnoten;i++) //Instanz Initialisieren
    {
    testa[i].set_nr(0);
    testa[i].set_xyz(0,0,0);
    }
    //Einlesen der Werte aus File:
    einlesen(femmod_p,1,g_AnzKnoten);
    }

    //**************************************************************************
    ****
    int einlesen (FILE *file_p, int typ, int Anzahl)
    // Liest die Werte aus der Dyna Datei in eine Instanz ein
    {
    int i=0;
    long int nr=0;
    double r=0,s=0,t=0.;
    int n=0; // Anzahl der aufgenommenen Werte

    switch(typ)
    {
    case 1: if (!keywrd_search (file_p , "*NODE" , 5)) return 1 ;
    break; //Wenn Punkte kommen werden eingelesen
    case 2: break; //Bei den Elementen 4 (2. Zeile)
    }
    for (i=1;i<=Anzahl;i++)
    {
    switch(typ)
    {
    case 1: n=fscanf(file_p,"%d%le%le%le\n",&nr,&r,&s,&t);
    **Jetzt kommt der Fehler: no match for `c_knoten& [int&]'
    operator

    testa[i].set_xyz(r,s,t);
    break;
    case 2: {
    ....
    }
    }
    }
    }

    // Definition der Klassen

    class c_knoten
    {
    private:
    long int nr; //knoten Nummer
    double x; //X-Koordinate
    double y; //entsprechend
    double z;
    public:

    void set_nr (long int);
    void set_x (double);
    void set_y (double);
    void set_z (double);
    void set_xyz (double,double,double);
    long int get_nr ();
    double get_x ();
    double get_y ();
    double get_z ();

    //Prototypen für Konstruktor/Destruktor
    c_knoten ();
    ~c_knoten();

    };

    //Methoden

    void c_knoten::set_nr (long int xnr) {nr = xnr; }
    void c_knoten::set_x (double xc) { x = xc; }
    void c_knoten::set_y (double yc) { y = yc; }
    void c_knoten::set_z (double zc) { z = zc; }
    void c_knoten::set_xyz (double xc, double yc, double zc)
    { x = xc; y = yc; z = zc;}
    long int c_knoten::get_nr () {return nr;}
    double c_knoten::get_x () {return x;}
    double c_knoten::get_y () {return y;}
    double c_knoten::get_z () {return z;}

    ////Konstruktor

    c_knoten::c_knoten ()
    {
    printf("Konstruktor arbeitet \n");

    }
    //Destruktor

    c_knoten::~c_knoten()
    {
    printf("destruktor arbeitet \n");
    }

    Vielen Dank für Eure Hilfe !!!



  • hallo

    dein problem ist meines erachtens ein anderes (bitte benutze das nächtste mal code tags ;))

    du hast eine globale instanz von c_knoten und versuchst dann in der main funktion, das zu tun:

    testa[g_AnzKnoten+1]; //Instanz für Knoten erschaffen
    

    (die main heißt übrigens int main() in c++)

    zum einen sind globale variablen nicht sonderlich schick in c++, zum anderen kann man arrays nur mit mit fester größe anlegen (gut, es gibt compiler, die es anders durchlassen, aber es ist nicht standard)

    entweder du machst ein festes array (zum beispiel in der main funktion) oder du alloziierst es mit new dynamisch auf dem heap.

    in deiner form kann er dementsprechend

    testa[i].set_xyz(r,s,t);
    

    garnicht in der funktion kennen, da er nur eine globale instanz kennt, aber kein array.

    wie gesagt, der fehler liegt nur vordergründig in der funktion.


Anmelden zum Antworten