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 werdentesta[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 Werteswitch(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");}
//Destruktorc_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.