Avatar billede tax Nybegynder
04. oktober 2001 - 11:02 Der er 10 kommentarer og
1 løsning

Globale variable

Jeg har følgende problem. Jeg har et projekt, der er delt op i en masse stumper (.cpp og .h filer)

Disse skal jeg have til at dele et par globale variable.

Jeg har prøvet at definere dem i min primære .h fil, men enten virker det ikke, eller så fungerer det og jeg bliver jeg spammet med fejl.

msg.obj : error LNK2005: \"struct IPstor  MyIP\" (?MyIP@@3UIPstor@@A) already defined in AUHWSIM.obj

Jeg inkluderer min primære .h fil alle de steder jeg vil tilgå de globale variable.

Jeg har prøvet 2 forskellige fremgangsmåder.
1) At gøre variablen til static, så klager den ikke, men variablene fungerer ikke.

2) At anvende en #ifndef osv. Her fungerer det, men jeg får en masse fejl.

Hvad gør en klog? -Bortset fra at tænke.
Avatar billede disky Nybegynder
04. oktober 2001 - 11:08 #1
det er fordi du includerer den samme fil to gange.

i alle dine .h filer skriv


#ifndef __filnavn
#define __filnavn

//her kommer din kode

#endif


__filnavn skal være et unikt for hver fil, f.eks. filnavnet uden .h
Avatar billede disky Nybegynder
04. oktober 2001 - 11:08 #2
at dit pkt 2. ikke virker må skyldes noget andet.
Avatar billede tax Nybegynder
04. oktober 2001 - 11:13 #3
Skal #ifndef osv. Omslutte det hele?

Også funktionserklæringer??
Avatar billede disky Nybegynder
04. oktober 2001 - 11:14 #4
ALLER øverst i din fil skal der stå:
#ifndef __filnavn
#define __filnavn



Og aller nederst:

#endif.

Det gør at filen KUN bliver inkluderet en gang.
Avatar billede tax Nybegynder
04. oktober 2001 - 11:16 #5
OK, jeg får bare en mass e fejl, når jeg gør det. Jeg skal nok lige gennemgå min struktur. :)
Avatar billede disky Nybegynder
04. oktober 2001 - 11:17 #6
da jeg lavede C++ programmer brugte jeg det, og det løste mine linking problemmer af samme type.

Jeg kan selvfølgelig ikke garantere at det med 100% sikkerhed er samme problem du har, men det tyder på det.
Avatar billede tax Nybegynder
04. oktober 2001 - 11:19 #7
Det konkrete problem jeg har er at nu kender et af mine delprogrammer ikke navnene på et par VC++ resources selvom at den er inkluderet. Det gjorde den før.. Jeg skal nok lige gennemgå det hele. Det er første gang at jeg arbejder på et stort projekt i mange filer. :)
Avatar billede disky Nybegynder
04. oktober 2001 - 11:23 #8
tax:

Okay jeg har ondt af dig,

tro mig jeg rev også mange hår ud af hovedet, og spiste negle første gang :)
Avatar billede soepro Nybegynder
04. oktober 2001 - 11:44 #9
Det er ikke den helt korrekte måde at lave tingene på ! Du skal godt nok kun inkludere din *.h fil een gang i den samme kodestump (hvilket kan sikres som ovenfor beskrevet), men selve variablerne skal jo kun defineres i en af alle de stumper der tilsammen bliver til dit program.

Metoden er som følger:

#ifndef __MAIN_H__
  #define __MAIN_H__

  #ifndef _varTp
    #define _varTp extern
  #endif

  _varTp int firstVar;
  _varTp char secondVar[20];
 
  // osv.

#endif

I den af dine kode stumper hvor variablerne skal være i, laver du så:

#define _varTp
#include \"main.h\"

i alle de andre laver du blot

#include \"main.h\"

På den her måde er dine variabler kun defineret eet eneste sted - og kan anvendes overalt i programmets forskellige stumper.
Avatar billede tax Nybegynder
04. oktober 2001 - 12:16 #10
Jeg har også nogle funktionserklæringer. Skal de sidde indenfor eller udenfor den yderste #ifndef. Jeg får fejl hvis den ikke gør.
Avatar billede soepro Nybegynder
04. oktober 2001 - 14:26 #11
Funktionsprototyperne skal ligge indenfor den første #ifdef (som styrer om selve .h filen allerede er behandlet for den aktuelle kodestump), men skal selvfølgelig ikke pre-fixes med _varTp:

#ifndef __main_h__
  #define __main_h__

  void aFunction(int, char*);

  _varTp int firstVar;
  _varTp char szecondVar[20];

  // Osv.

#endif
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester