Probleme mit statischen Klassenelementen
-
Hallo,
ich habe folgenden Code:.h:
class CanFile { private: static int fh; public: static int FileOpen(char *filename); };
.cpp:
static int CanFile::FileOpen(char *filename) { if ((fh = open(filename, O_RDONLY)) == -1) { printf("canfile: Cannot open file %s.\n", filename); exit(1); } return (int)fh; }
Wenn ich nun die Klasse in mein Hauptprogramm einbinde, mittels
int fh = CanFile::FileOpen (qApp->argv()[1]);
und alles mit dem gcc kompiliere, kriege ich folgenden Fehler:
/usr/bin/gcc -Wall -g -I/usr/lib/qt/include -c anFCntl.cpp
anFCntl.cpp:4: cannot declare member function `static int
CanFile::FileOpen(char*)' to have static linkage
make: *** [anFCntl.o] Error 1Was geht da schief? Ich habe schon mal die FAQs dazu durchgesehen, aber nach einem Problem mit dem Speicher sieht das nicht aus, da es ja passiert, wenn die Klasse in ein Objekt umgewandelt wird.
Bin für jede Hilfe dankbar.
- Bjoern
-
Da ist ein static zuviel
static //<- wegnehmen int CanFile::FileOpen(char *filename) {
-
Ja, das hat einen Fehler gelöst, nun kommt aber immer:
/usr/bin/gcc -Wall -g -I/usr/lib/qt/include -c anFCntl.cpp
anFCntl.cpp: In static member functionstatic int CanFile::FileOpen(char*)': /usr/bin/gcc -Wall -g -I/usr/lib/qt/include -L/usr/lib/qt/lib -lqt -o qtdbf main.o DlgDbfStat.o xBaseCore.o anFCntl.o DlgDbfStat.moc.o anFCntl.o: In function
CanFile::FileOpen(char*)':
/home/lunatic/devel/dbf-gui/src/anFCntl.cpp:6: undefined reference toCanFile::fh' /home/lunatic/devel/dbf-gui/src/anFCntl.cpp:6: undefined reference to
CanFile::fh'
/home/lunatic/devel/dbf-gui/src/anFCntl.cpp:11: undefined reference to `CanFile::fh'
collect2: ld returned 1 exit status
make: *** [all] Error 1Nochh eine Idee?
-
hallo,
du benutzt in der methode fileOpen eine variable fh, bei der rueckgabe castest du sie nach int, die du nirgendwo anlegst. nur weil die variable im im hauptprogramm auch fh heist weis der compiler noch lang nicht was er in der methode mit dem fh anstellen soll(was sie fuer einen typ hat.
-
Wenn etwas static deklariert ist bedeutet das erstmal, dass beim anlegen eines Objekts dieses etwas nicht mitkopiert wird. Dass heisst aber wiederum, dass der Speicher für dieses etwas nicht automatisch zu irgend einem Zeitpunkt erzeugt, also definiert, wird.
Einint CanFile::fh
in deiner .cpp sorgt dafür, dass der entsprechnde Speicherplatz reserviert wird.
Bis dann...
Peanut[ Dieser Beitrag wurde am 23.06.2003 um 10:26 Uhr von Peanut editiert. ]