Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Compilazione separata
Forum - C/C++ - Compilazione separata

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Salve, allora ho un programma su più sorgenti.

main.cpp
include.h
framework.cpp
framework.h
classi.cpp
classi.h
funzioni.cpp
funzioni.h

Allora in framework.h ho definito un namespace "fe_frame" in cui ci sono le classi "framework" ed "error". Ho bisogno anche di uno stream per scrivere gli eventuali errori su file e nel namespace definisco ofstream *error_stream;
Posto il codice :

Codice sorgente - presumibilmente C++

  1. #ifndef FE_FRAME
  2.    #define FE_FRAME
  3.  
  4. #include "include.h" //per le librerie SDL
  5. #include <fstream>
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10.  
  11.  
  12. namespace fe_frame
  13. {
  14.        
  15.  ofstream *error_stream;
  16.  void setStreamOut(ofstream &file);
  17.        
  18.  class framework { .... };
  19.  
  20.  class error { ... };
  21.  
  22.  
  23. };
  24.  
  25. #endif




allora, nonostante le direttive #ifndef,#define #endif  il compilatore dice che error_stream è gia definito in classi.obj, questo perchè l'header è incluso da piu file.
Non riesco a trovare una soluzione, ho anche provato a definire extern ofstream *error_strem, ma mi da lo stesso errore!

p.s : uso visual c++ express 2010

Ultima modifica effettuata da il 02/09/2010 alle 20:01
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
3
Down
V
Segnala al moderatore
Postato alle 20:13
Giovedì, 02/09/2010
non puoi dichiarare una variabile in un file .h, sia in un namespace sia fuori :)

devi invece dichiararla in un file cpp e richiamarla dagli altri file con extern:

Codice sorgente - presumibilmente C/C++

  1. extern ofstream *error_stream;



P.S cmq lo stream di errore si chiama cerr, puoi usare quello senza doverlo ridichiarare :)

Ultima modifica effettuata da HeDo il 03/09/2010 alle 17:45
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
-1
Down
V
Segnala al moderatore
Postato alle 16:11
Venerdì, 03/09/2010
grazie della risposta!

PM
Usa i commenti per chiedere spiegazioni o ringraziare le risposte.