Ridefinizione variabili inclusione header (usando #ifndef e #define)

di il
5 risposte

Ridefinizione variabili inclusione header (usando #ifndef e #define)

Come nel titolo, nonostante #ifndef e #define (e #pragma once, di cui non conosco bene l'utilità) è come se l'Header (main.h) venisse compilato lo stesso più volte, c'è da dire che in questo header ho definito ed assegnato i valori alle variabili, e non solo definito, non so se possa essere rilevante o è solo una convenzione.
Fino ad ora funzionava, ha smesso di funzionare quando ho aggiunto un altro file per riorganizzare il programma: per ora ho un .cpp e 3 header, prima gestivo tutto dal cpp, ora ho delle funzioni nel terzo header, che, quando include main.h, me lo ricompila.
Ditemi se vi servono altre informazioni o se sono stato poco chiaro, grazie mille in anticipo!

5 Risposte

  • Re: Ridefinizione variabili inclusione header (usando #ifndef e #define)

    Niente variabili né assegnaxioni e mostra i sorgenti
  • Re: Ridefinizione variabili inclusione header (usando #ifndef e #define)

    Main.h
    
    #pragma once
    #ifndef main_H_
    #define main_H_[code]
    //Some colors
    SDL_Color White = { 255, 255, 255 };
    SDL_Color Black = { 0,0,0 };
    SDL_Color Transparent = { 0,0,0,0 };
    SDL_Color Green = { 0,255,0 };

    #endif
    [/code]

    main.cpp
    
    //main.cpp: definisce il punto di ingresso dell'applicazione console.
    //
    
    #include "stdafx.h"
    #include <Levels.h>
    #include <main.h>
    #include <Animations.h>
    
    int main()
    {
    ..........
    ..........
    ..........
    return 0;
    }
    
    Levels.h
    
    #pragma once
    #include <stdafx.h>
    #include <Animations.h>
    
    #ifndef levels_H_
    #define levels_H_
    
    void starting()
    {
    ...
    ...
    ...
    }
    
    void starting_level()
    {
    	starting();
    }
    
    #endif
    
    Animations.h
    
    #pragma once
    
    #include "stdafx.h"
    
    #include <main.h>
    
    #ifndef Animations_H_
    #define Animations_H_
    
    void Write(string txt)
    {
    ...
    ...
    }
    
    void Record()
    {
    ...
    ...
    ...
    }
    
    #endif
    
    Ho omesso di ricopiare l'intero codice, perché mi da errore con TUTTE le variabili, quindi credo sia indifferente specificarle o meno tutte, in ogni funzione dichiarata devo avere la possibilità di accedere alle variabili dichiarate nei file inclusi. Ad esempio in Animations.h, ho incluso main.h appositamente. Gli errori sono nel file Levels.obj.
  • Re: Ridefinizione variabili inclusione header (usando #ifndef e #define)

    Intanto devi scrivere

    #include "Levels.h"
    #include "main.h"
    #include "Animations.h"

    nel file del main.

    In secondo luogo, nei file include (.h) NON devi implementare il codice delle funzioni ma devi solamente dichiararle. Ad esempio, in levels.h

    void starting();
    void starting_level();

    e basta. L'implementazione la scrivi in un file .cpp
  • Re: Ridefinizione variabili inclusione header (usando #ifndef e #define)

    Scusa per il ritardo nella risposta, ma comunque il problema persiste anche semplicemente includendo in due file .cpp uno stesso header:

    main.h
    #pragma once
    #ifndef main_H_
    #define main_H_
    
    int a;
    
    #endif
    main.cpp
    // Prova.cpp: definisce il punto di ingresso dell'applicazione console.
    //
    #include "stdafx.h"
    #include <main.h>
    #include <iostream>
    
    int main()
    {
    	int Wait;
    	std::cin >> Wait;
    
        return 0;
    }
    
    Origine.cpp
    #include "stdafx.h"
    #include <main.h>
  • Re: Ridefinizione variabili inclusione header (usando #ifndef e #define)

    Il codice

    int a;

    NON va nell'include ma nel file origine.cpp. Te l'ho già detto. Come ti ho già detto che devi scrivere

    #include "main.h"

    Inoltre negli include basta scrivere

    #pragma once

    e rimuovere tutta la parte #ifndef ... #define ... #endif che la pragma sostituisce.
Devi accedere o registrarti per scrivere nel forum
5 risposte