"public:"-Variable in Klasse wird nicht gesehen

hallo zusammen,

ich war bisher der Meinung, dass Variablen, die im *.h File einer Klasse unter "public:" deklariert werden von überall her sichtbar und verwendbar sind.
Allerdings klappt das bei mir nicht.

hier meine Headerdatei CKlasse.h:

Code:
class CKlasse                                                                                                                                                                          
{                                                                                                                                                                                      
    public:                                                                                                                                                                            
        // Variablen                                                                                                                                                                   
        int position;                                                                                                                                                                  
        // Methoden                                                                                                                                                                    
        void methode1();                                                                                                                                                                 
        bool methode2();                                                                                                                                                                 
};
und hier die Implementierung in CKlasse.cpp:
Code:
#include<iostream.h>                                                                                                                                                                   
#include"CKlasse.h"                                                                                                                                                                     
                                                                                                                                                                                       
void methode1()                                                                                                                                                                          
{                                                                                                                                                                                      
    srandom(time(NULL));                                                                                                                                                               
    position = (random()%6)+1;                                                                                                                                                         
}
das wird bei mir nicht kompiliert (g++).
Ich erhalte die Fehlermeldung:
Code:
g++ -Wall -ansi  -c classes/CKlasse.cpp
classes/CKlasse.cpp: In function `void methode1()':
classes/CKlasse.cpp:15: error: `position' undeclared (first use this function)
classes/CKlasse.cpp:15: error: (Each undeclared identifier is reported only once 
   for each function it appears in.)
make: *** [CKlasse.o] Error 1

Kann mir jemand sagen, woran das liegt ?
 
Du musst bei der Implementierung schon angeben, zu welcher Klasse die Methode gehören soll, also
void CKlasse::methode1() {
}
(ich glaube die Referenzierung war in C++ der ::, habe zu lange nichts damit gemacht *g*)
ansonsten definierst du eine ganz normale Funktion, die nichts mit der Klasse zu tun hat. Außerdem können ja verschiedene Klassen Methoden gleichen Namens enthalten.
Übrigens solltest du deine Member-Variablen so weit wie möglich private deklarieren, im Zweifel lieber Zugriffsmethoden schreiben. Diese lassen sich nämlich anpassen, wenn du die interne Struktur mal veränderst. Solange nur die Methoden der Klasse auf die Member-Variablen zugreifen gibt es keinen Grund für "public".

Greets, Ziri
 
oh mann - ja natürlich, du hast recht.
ich werde das gleich versuchen -

ist mein erster Versuch selber mal was mit Klassen zu machen :D

Vielen Dank für die Hilfe
 
Zurück
Oben