Avatar billede rrm Nybegynder
15. november 2005 - 16:43 Der er 12 kommentarer og
1 løsning

Angående #ifndef, #define, #endif

Hejsa

Jeg har lidt bøvl med at bruge #ifndef, #define, #endif konstruktionen.

Jeg har en fil func.h som indeholder følgende:

#ifndef FUNC_H

    #define FUNC_H 1

    ...

    #include "shared/wxLogger.h"
   
    // Defining a global logging class
    wxLogger logging;

#endif

Denne file bliver så includeret af to filer museq.h og wxMainFrame.h, hvor wxMainFrame.h bliver includeret af museq.h. Problemet er at linker giver følgende fejl:

wxMainFrame.obj : error LNK2005: "class wxLogger logging" (?logging@@3VwxLogger@@A) already defined in museq.obj
.\Debug\MuSeq.exe : fatal error LNK1169: one or more multiply defined symbols found

Er der noget har jeg misforstået ved define konstruktionen, eller skal kigget et andet sted?
Avatar billede arne_v Ekspert
15. november 2005 - 16:45 #1
prøv lige

extern wxLogger logging;
Avatar billede rrm Nybegynder
15. november 2005 - 16:56 #2
så får jeg
museq.obj : error LNK2001: unresolved external symbol "class wxLogger logging" (?logging@@3VwxLogger@@A)
Avatar billede arne_v Ekspert
15. november 2005 - 16:58 #3
extern wxLogger logging;

i .h filen og

wxLogger logging;

i en enkelt .cpp fil
Avatar billede rrm Nybegynder
15. november 2005 - 23:28 #4
men burde ifndef, define, endif ikke sørge for at erklæringen kun bliver læst en gang?
Avatar billede arne_v Ekspert
15. november 2005 - 23:29 #5
kun en gang i hver .cpp fil !
Avatar billede rrm Nybegynder
17. november 2005 - 21:52 #6
okey... Synes bare at jeg har fået fejl, hvis jeg forsøgte med: A includer B og C, mens B includer C. Så brokker den sig over at typer i C er blevet erklæret flere gange. Det er derfor jeg bruger det, men tager jeg fejl??
Avatar billede arne_v Ekspert
17. november 2005 - 22:47 #7
nej - den løser det problem

men 2 cpp filer som oversættes helt seperat berøres ikke af den
Avatar billede rrm Nybegynder
18. november 2005 - 14:48 #8
ok, lige en anden ting, kan man lave interface i c++ med variable??

class fisk {
protected:
  String fisk = 0
}

og så alle klasser der nedarver fra denne skal definere variablen fisk? Er det muligt??

Det skal bruges til en loging funktionen, der igen et define direktiv, skal kunne skrive klassen navn.
Avatar billede arne_v Ekspert
18. november 2005 - 15:19 #9
C++ har jo ikke en speciel syntax for interfaces som C# og Java (ikke nødvendigt da
multiple arv generelt er tilladt)

Du kan altid arve fra sådan en klasse som du beskriver.
Avatar billede rrm Nybegynder
18. november 2005 - 15:47 #10
hmm, ønskede er at alle klasser skal implementere en variable, hvordan definere man en sådan variable???
Avatar billede arne_v Ekspert
18. november 2005 - 16:18 #11
C++ understøtter ikke virtual fields

definer en abstrakt (virtuel = 0) get og set
Avatar billede rrm Nybegynder
19. november 2005 - 12:42 #12
hmmm, det må jeg så leve med... Læg et svar
Avatar billede arne_v Ekspert
19. november 2005 - 13:09 #13
svar
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