PDA

Visualizza la versione completa : C++ Dichiarazione non consentita


XWolverineX
04-05-2008, 13:38
Ho questa dichiarazione un p spartana



union
{
struct {
ID3D10Buffer *VertexBuffer;
ID3D10Buffer *IndexBuffer;
UINT Indici;
D3DXMATRIX Objmatr;
GeneralMaterial Mats;
unsigned int TextCount;
} ColladaBuffer;

struct {
ID3DX10Mesh *pMesh;
Material *Materials;
DWORD Mat;
} XBuffer;
} MeshData;


Ma quando compilo, ottengo il seguente errore

Error 1 error C2620: member 'CMesh::ColladaBuffer' of union 'CMesh::<unnamed-tag>' has user-defined constructor or non-trivial default constructor c:\users\vincenzo\documents\visual studio 2008\projects\colladadom\include\loadmesh.h 73

MacApp
04-05-2008, 14:29
Prova cos:


union UMeshData
{
struct {
ID3D10Buffer *VertexBuffer;
ID3D10Buffer *IndexBuffer;
UINT Indici;
D3DXMATRIX Objmatr;
GeneralMaterial Mats;
unsigned int TextCount;
} ColladaBuffer;

struct {
ID3DX10Mesh *pMesh;
Material *Materials;
DWORD Mat;
} XBuffer;
} MeshData;


EDIT: ipotizzando che tu stia definendo la variabile MeshData di tipo "union UMeshData".

MacApp
04-05-2008, 14:35
Oppure, verifica che i membri delle strutture anonime ColladaBuffer e XBuffer abbiano il costruttore di default (quello senza argomenti)

XWolverineX
04-05-2008, 16:06
Non va lo stesso, e in effetti non c' il costruttore di default.
Non funziona nemmeno se non rendo anonime le 2 strutture.
Ma perch necessario?
Perch deve esserci in un'unione?

MacApp
04-05-2008, 16:22
Per dare una risposta precisa bisognerebbe vedere il resto del codice.
Ma potrebbe essere che, alcuni membri delle strutture anonime della union, abbiano dei costruttori non di default; ma nella definizione della variabile MeshData viene usato il costruttore di default della sua union anonima, ergo il copilatore richiede il costruttore di default anche per quei membri in cui essendo definito un construttore non di default DEVE essere definito anche il costruttore di default.
Chiarissimo no?
;-)

XWolverineX
04-05-2008, 19:26
Chiarissimo ma...perch l'union vuole il costrutture di default, e la struct invece no?
Se metto la struct anonima soltanto, compila e funziona

shodan
04-05-2008, 19:38
Controlla che i membri di ColladaBuffer abbiano tutti un costruttore di default.
L'errore li.

XWolverineX
04-05-2008, 19:45
Il problema che i 4 oggetti che necessitano di un costruttore di default non sono mie classi e sono implementate (come si legge) da DirectX.
Non posso andare e modificare le definizioni!!

MacApp
04-05-2008, 19:54
Originariamente inviato da XWolverineX
Il problema che i 4 oggetti che necessitano di un costruttore di default non sono mie classi e sono implementate (come si legge) da DirectX.
Non posso andare e modificare le definizioni!!
Quindi dota di ColladaBuffer di un costruttore di default che chiami i costruttori non di default dei sui membri che non lo hanno.

XWolverineX
04-05-2008, 19:59
A dire il vero il costruttore non cel'hanno proprio.
Sono interfacce un p particolari:



MIDL_INTERFACE("9B7E4C02-342C-4106-A19F-4F2704F689F0")
ID3D10Buffer : public ID3D10Resource
{
public:
virtual HRESULT STDMETHODCALLTYPE Map(
/* */
__in D3D10_MAP MapType,
/* */
__in UINT MapFlags,
/* */
__out void **ppData) = 0;

virtual void STDMETHODCALLTYPE Unmap( void) = 0;

virtual void STDMETHODCALLTYPE GetDesc(
/* */
__out D3D10_BUFFER_DESC *pDesc) = 0;

};

Loading