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