webForumDet fria alternativet

tekniska frågor

2 svar · 219 visningar · startad av Bratte

BratteMedlem sedan feb. 200240 inlägg
#1

Hej, jag har två tekniska frågor:

1.) Jag initierade en array med struct'ar för ett tag sedan. Struct'en hade följande utseende:

struct vertex
{
int x,y,z;
}

Jag initierade genom sattsen:

vertex V[]={{1,2,3},{4,5,6},{6,7,8}};

Detta gick bra men när jag bytte ut medlemsvariablerna i struct'en till:

struct vertex
{
D3DXVECTOR3 P;
D3DXVECTOR3 N;
}

så uppstod det problem när jag försökte initiera struct-arrayen på samma sätt , jag fick felmedelandet:

C:\C++\MyDirectX\XXX\XXX.CPP(151) : error C2440: 'initializing' : cannot convert from 'struct D3DXVECTOR3' to 'struct vertex'

Varför detta och går det att göra något åt det?

2.) Någon som har använt sig av _beginthread och _endthread, brukar ni i så fall få oförkarliga felmedelanden som:

C:\C++\MyDirectX\XXX\XXX.CPP(283) : error C2065: '_endthread' : undeclared identifier

även fast ni är 100% säkra på att process.h är inkluderat. Kompilatorn kan till och med svara på vilka parametrar funktioneran har som indata. Ska man använda något annat tillvägagångssätt för att konstruera trådar?

Tack på förhand /Simon

Sang-draxMedlem sedan juli 2002581 inlägg
#2

Är inte D3DXVECTOR3 en klass

I så fall är det inte så konstigt att det inte fungerar

Kan inte något i stilen med
ertex V[]={{{1,2,3},{1,2,3}},{{1,2,3},{1,2,3}},{{1,2,3},{1,2,3}}}; fungera?

Fast du bör nog lösa det på något annat sätt (tips: for-loop).

developerMedlem sedan aug. 2001458 inlägg
#3

1. Ett sätt är att lägga till en konstruktor till strukten. Då gör du såhär:

struct vertex
{ 
	D3DXVECTOR3 P;
	D3DXVECTOR3 N;
	vertex(const D3DXVECTOR3& p, const D3DXVECTOR3& n)
		: P(p), N(n)
	{
	}
};

void main()
{
	vertex V[] =
	{
		vertex( D3DXVECTOR3(1, 2, 3), D3DXVECTOR3(4, 5, 6) ),
		vertex( D3DXVECTOR3(9, 8, 7), D3DXVECTOR3(6, 5, 4) ),
	};
}

2. Det beror på att du bygger projektet som single-threaded. Ställ om i project settings (compile nånting, code generation) så att ditt runtime library är Multithreaded [Debug] DLL. Anledningen till kompileringsfelet är att _beginthread[ex] ligger innanför "#ifdef _MT", dvs den finns bara med om man bygger multi-threaded.

133 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)