2016-07-13 22 views
0

Ich kompiliere anderen Team-Quellcode. Ich verstehe den Fehler, den ich bekomme, aber ich bin nicht in der Lage, diese Zeile des Codes zu verstehen (die Code-Basis soll korrekt sein).((__m64 *) & (ub8) ddata) geben Fehler: Lvalue als unäre '&' Operand

data_vec = _mm_set1_epi64(*((__m64*)&(ub8) ddata)); 

Was ist (__m64 *)? Und was macht es dort?

EDIT: der Fehler ist: Fehler: L-Wert als einstellige erforderlich ‚&‘ Operand

+0

'_mm_set1_epi64x' nimmt einen int64 anstelle eines' __m64' (MMX) -Operanden; Sie könnten es lieber verwenden (aber überprüfen Sie, dass Ihr Compiler es im 32-Bit-Modus bietet.) –

Antwort

2

Es ist eine Umwandlung in einen Zeiger. Informationen zu den verwendeten SSE2-Typen und -Funktionen finden Sie unter MSDN for information.

Der Fehler hat nichts miteinander zu tun. Ein casted Wert ist kein lvalue mehr, während & nur für lvalues ​​verwendet werden kann. Entfernen Sie die (ub8) Umwandlung oder suchen Sie noch besser nach der Person oder dem Makro, die diesen Code erzeugt hat.

+0

Ich war ein Noob mit dem (__m64 *) ... aber warum ein Zeiger vor Ampersand gesetzt wird? – nineties

+0

'ddata' ist ein Zeiger? – a3f

+0

Ja, es ist ein Zeiger. Ich zögere, die Besetzung zu entfernen (sie wird an etwa 3000 Stellen in der Projektdatei verwendet) ... – nineties