[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]![]() |
![]() |
![]() |
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
![]() |
![]() |
![]() |
Hej ++Alle Jeg har indikeret at løsningen af Sunes umidelbare problem er at erklære de globale variable som statiske. Jeg skal ikke blande mig i diskussionen om korrekt "C++ programming style" - blot gøre opmærksom på at Bjarne Stroustrup(BS) anbefaler at koden er "self-explanatory" og at jeg selv meget rigoristisk følger *MIN* fortolkning af BS' "hints". Hvis det umidelbare problem er *hurtig* konvertering af C programmer til C++ *kan* man som jeg anbefalede ændre linjen: int a, b, c[100]; til: static int a, b, c[100]; Personligt ville jeg dog efter moden overvejelse af min forståelse af problemet *langt* foretrække extern "C" { int a, b, c[100]; } hvilket *explicit* gør opmærksom på at der *her* anvendes C "linkage conventions" *samt* ikke-comme il faut C++ "programing practice." For en god ordens skyld skal jeg gøre opmærksom på at jeg i modsætning til anvendelsen af static erklæringen *ikke* har afprøvet extern "C" forslaget -- jeg har kun BS og gcc's (engelsk ejefald bevidst valgt) ord for at det virker. Med venlig hilsen Nils Åke Ljunggren. needless Game resigns Sune Fischer skrev: > Hej, > > jeg har prøvet at konvertere nogle programmer fra C til C++, men > enkelte ting giver mig grå hår (og jeg er kun 23). Problemet kan skæres > ned til følgende: > Jeg har en del variable jeg ikke gider kaste rundt imellem > funktionerne, og derfor vil jeg have dem globale. Desuden vil jeg have > delt funktionerne ud på flere filer, og så er det problemerne opstår. > Linkeren kommer med beskeder om at de variable allerede er defineret, > her er et eksempel og det virker fint i C, men ikke i C++? > > // filen globals.h : > #ifndef GLOBALS_H > #define GLOBALS_H > > #include <stdio.h> > > void Testfunk(); > int a, b, c[100]; > > #endif > > // filen main.cpp : > #include "globals.h" > > int main(void) > { > Testfunk(); > return(0); > } > > // filen Cppfil2.cpp : > #include "globals.h" > > void Testfunk() > { > printf("made it!\n"); > return; > } > > // Makefile: > CC = g++ > CFLAGS = -O3 -fmemoize-lookups > > PROGNAME = test.x > > SOURCES = main.cpp \ > Cppfil2.cpp \ > > OBJECTS = $(SOURCES:.cpp=.o) > > .cpp.o: > $(CC) -c $(CFLAGS) $< -o $@ > > $(PROGNAME): $(OBJECTS) > $(CC) $(OBJECTS) -o $(PROGNAME) > > clean: > rm -f $(PROGNAME) > rm -f *.o > rm -f *~ > > Er det et problem med Makefilen, for det styrer jeg ikke rigtigt. > Det er som om #ifndef ikke virker i C++?? > > Sune > _________________________________________________________ > Do You Yahoo!? > Get your free @yahoo.com address at http://mail.yahoo.com
![]() |
![]() |
![]() |
||||||||||||
|
||||||||||||||
![]() | ||||||||||||||
|
||||||||||||||
![]() |
![]() |
![]() |