Gå til innhold

en header flere kildefiler


Anbefalte innlegg

vil dele opp koden min som følgende:

i en header vil jeg ha deklerasjoner til flere klasser (3-4), men ønsker så at disse klassene blir skrevet i hver sin cpp fil etterpå.

 

minheader.h

et par klasse deklerasjsoner.....

 

klasse1.cpp

klasse2.cpp

 

men det fungerte ikke med å bruke #include minheader.h i cpp-filene.

Det er vel noe som må skrives i .h-fila for at det skal fungere?

 

bruker g++ på linux

Lenke til kommentar
Videoannonse
Annonse

#ifndef _min_header_hpp_
#define _min_header_hpp_

class SomeClass { /* ... */ };
class AnotherClass { /* ... */ };

#endif

#include "min_header.hpp"

void SomeClass::function()
{
//...
}

#include "min_header.hpp"

void AnotherClass::another_function()
{
//...
}

Enkelt og greit.

Endret av staalezh
Lenke til kommentar
#ifndef _min_header_hpp_
#define _min_header_hpp_

class SomeClass { /* ... */ };
class AnotherClass { /* ... */ };

#endif

#include "min_header.hpp"

void SomeClass::function()
{
//...
}

#include "min_header.hpp"

void AnotherClass::another_function()
{
//...
}

Enkelt og greit.

8814786[/snapback]

 

Ok, da kan jeg med å sette opp filene slik lage følgende program utra dem:

#include "min_header.hpp"

int main(){
 SomeClass s;
 AnotherClass a;
 s.WorldDomination();
 a. meaningOfLife();
 return 42;
}

Lenke til kommentar

Evt. bare setter du "#pragma once" i starten på headeren:

 

header.h:

#pragma once

class ClassA {...};
class ClassB {...};

 

Hovedsaken er uansett at du må hindre headeren i å includes mer enn èn gang. Include guards som staalezh brukte er vel strengt tatt det som er mest brukt mens "#pragma once" ikke er et standard preprosessordirektiv, men det kan se litt ryddigere ut. I tillegg vil #pragma once ikke ha noen problemer med navnekollisjoner: Om f.eks. "_min_header_hpp_" allerede er definert når min_header.h inkluderes for første gang, vil ikke koden i min_header_h bli inkludert i det hele tatt. Nå er vel egentlig ikke det noe stort og utbredt problem men... ja. :)

 

Valget er ditt.

Endret av ZiggWarth
Lenke til kommentar

Får det ikke helt til å fungere.

Har en fil math.hpp som inneholder klassen Vector. Med f.eks metoden Normalize().

 

Får kompilert dette sammen til en .so fil.

 

Men når eg lager en main.cpp for å teste det hele.

 

#include "math.hpp"

int main(){
 Vector *v = Vector(1,2,3);
 v->Normalize(); // dette gir en feil

 

prøver å kompilere dette, men får feil om at Normalize ikke er deklarert.

 

følgende fungere:

std::cout << v->x;

 

.so filen blir laga ved bruk av scons

env = Environment()
env.SharedLibrary('3dmath', ['vector.cpp', 'matrix.cpp', 'ray.cpp', 'plane.cpp'])

Lenke til kommentar

Får det til å fungere litt.

dvs det fungerer dersom jeg har funksjonen void Normalize(), men dersom jeg tar inline void Normalize() så fungerer det ikke.

Er det forskjell på hvordan en skal skrive inline funkjsoner?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...