C++ Static Member initialisieren; g++ Error

Anthrax

Lieutenant
Registriert
Juli 2002
Beiträge
844
Hallo

Vieleicht kann mir ja einer weiterhelfen.
Gibt es eine Möglichkeit mit dem GNU g++ statische Member zu initialisieren? Einfaches Beispiel:

class Test{

static int count;

};

int Test::count = 1; //Kompiler error unter g++

Der g++-Compiler schluckt das nicht; gibt es hier Alternativen? Borland und der Microsoft eigene Compiler haben damit keine Probleme.
Da in meinem Programmierprojekt ausschließlich auf GNU gesetzt wird, kann ich nicht einfach den Compiler wechseln. Andererseits benötige ich das oben erwähnte Konstukt.

Anthrax
 
Wie lautet denn die Fehlermeldung? Dein Aufbau stimmt auf jeden Fall so und ich verwende den gleichen Aufbau mit dem GNU-Compiler (allerdings für den Hitachi SH4 unter Windows verwende ich auch den Microsoft Compiler).
 
Code:
asdf@localh0rst ~/src $ cat static.cpp 
class test {
        static int count;
};

int test::count = 1;
asdf@localh0rst ~/src $ g++ -Wall -pedantic -c static.cpp

Kompiliert völlig ohne Probleme.
Vielleicht hilft gcc -v weiter:

Code:
asdf@localh0rst ~/src $ gcc -v
Using built-in specs.
Target: i486-pc-linux-gnu
Configured with: /var/tmp/portage/sys-devel/gcc-4.2.4/work/gcc-4.2.4/configure --prefix=/usr --bindir=/usr/i486-pc-linux-gnu/gcc-bin/4.2.4 --includedir=/usr/lib/gcc/i486-pc-linux-gnu/4.2.4/include --datadir=/usr/share/gcc-data/i486-pc-linux-gnu/4.2.4 --mandir=/usr/share/gcc-data/i486-pc-linux-gnu/4.2.4/man --infodir=/usr/share/gcc-data/i486-pc-linux-gnu/4.2.4/info --with-gxx-include-dir=/usr/lib/gcc/i486-pc-linux-gnu/4.2.4/include/g++-v4 --host=i486-pc-linux-gnu --build=i486-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-multilib --enable-libmudflap --disable-libssp --disable-libgcj --with-arch=i486 --enable-languages=c,c++,treelang,fortran --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
Thread model: posix
gcc version 4.2.4 (Gentoo 4.2.4 p1.0)
 
Ah, danke für die Anworten. Den Kompiliertest hatte ich auch gemacht. Und wenn alles schön in einem cpp-File steckt, geht das auch ohne Probleme (Borland... ). Aber das Problem ist ein Linkerproblem. Die class-Deklaration hatte ich in einem Header und ich habe versucht die Member auch in einem Header zu initialisieren. Das geht aber nicht. Fehler: Multiple definition ... First define here. Ist mir nun auch nachvollziehbar, weshalb der Linker hier mit einem Fehler stoppt.

Nun habe ich so langsam geschnallt, dass im Header deklartiert und in das included cpp-File definiert wird. Dauert halt manchmal etwas länger :rolleyes: . Nun läuft alles so wie ich es haben will. Von daher hat sich das Problem fast von selbst gelöst :D .
 
Zurück
Oben