Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]problema include

    ciao.

    ho la seguente inclusione

    #include "Float1.h"
    #include "Float2.h"
    #include "Float3.h"
    #include "Float4.h"

    vorrei trovare un metodo per non duplicare le inclusioni.
    Nel file cpp ho utilizzato lo stadfx.h dove ho incluso tutte le classi .h utilizzate dal progetto.
    e nel file .h quello che mi serviva al momento.
    Il problema è che se in un file cpp ci sono 2 o piu file .h con

    #include "Float1.h"
    #include "Float2.h"
    #include "Float3.h"
    #include "Float4.h"

    duplicazione!!!!

  2. #2
    Forse non ho ben capito il tuo problema, tuttavia se cosi non fosse prova cosi: nei tuoi headers che vuoi includere dovrai indicare al preprocessore compile-time che andranno inclusi una e una sola volta, sebbene la direttiva #include compaia più volte.

    1) Soluzione

    #ifndef FLOAT1_H
    #define FLOAT1_H

    // Resto di "Float1.h"

    #endif



    2) Soluzione

    #pragma once

    // Resto di "Float1.h"




    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    no , mi spiego meglio:
    guarda i Float4:
    [code]
    #pragma once
    #include "PgeCoreLib.h"
    #include "Float4.h"
    #include <atlcomcli.h>
    namespace PGE{

    class WM4_PGECORE_ITEM CBaseEffect
    {
    public:
    CBaseEffect(void);
    ~CBaseEffect(void);
    ID3D11VertexShader * GetVShader();
    ID3D11PixelShader * GetPShader();
    void Setlayout(ID3D11InputLayout* pLayout);
    ID3D11InputLayout * GetLayout();
    Float4 Getxxx();
    void SetStride(int stride);
    protected:
    ID3D11VertexShader* m_pVShader;
    ID3D11PixelShader* m_pPShader;
    CComPtr<ID3D11Device> m_pDevice;
    ID3D11InputLayout* m_pLayout;
    //size del vertice
    int m_stride;
    };
    typedef boost::shared_ptr<CBaseEffect> ptrBaseEffect;

    }
    [code]

    se ho un altro header che deve includere la classe Float4 perchè la usa nella definizione e una terza classe deve includere le due classi precedenti, ho incluso il float4 due volte we ho un errrore,


    Utilizzo un sistema cosi strutturato:
    Ho vari progetti separati ed un eseguibile.
    Nei vari progetti ho un file headers.h in cui metto tutti gli .h del progetto.
    In tutti i file .cpp includo questo headers.h.
    Alla fine della compilazione i vari progetti creano un file .lib e una dll .
    copio questi due file in una directory comune Lib e copio tutti i .h del progetto in una directory comune Include dei vari progetti.

    Il problema sono i .h , se ho bisogno per una definizione di una classe la devo includere e quindi viene inclusa due volte.

    Volevo risolvere con la direttiva
    class CClasseInclusa
    prima della definizione della classe che devo creare , ma uso degli smartpointers e nelle definizione non devo utilizzare la classe , bensi lo smart pointer, altrimenti se uso la classe non mi servono a niente.

    questo è l'errore che mi salta fuori:
    Error 21 error C2011: 'PGE::CMesh' : 'class' type redefinition c:\pgn2010\trunk\include\Mesh.h 8

  4. #4
    Se hai una classe o qualsiasi altra definizione che viene ripetuta in altri sorgenti e ti da errore, allora devi riorganizzare meglio gli header.

    Ti sconsiglio #pragma once, o meglio è una direttiva del compilatore microsoft, non è standard.

    Il modo migliore è la soluzione 1 suggerita da GliderKite.

    Se una classe, ad esempio, ti da errore che è ridefinita, allora la sposti in un nuovo header, propriamente organizzato (non frammentando brutalmente il codice ovviamente), e lo includi dove ti serve.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.