2013-07-29 69 views
0

我試圖爲cl_float4創建覆蓋。OpenCL cl_float4運算符覆蓋

定義:

cl_float4 operator- (const cl_float4 &V1, const cl_float4 &V2); 

實現:

cl_float4 operator- (cl_float4 &V1, cl_float4 &V2){ 
    return {V1.x - V2.x, V1.y - V2.y, V1.z - V2.z, V1.w - V2.w}; 
} 

現在,當我做這樣的事情:

cl_float4 a = {1,2,3,4}, b = {4,3,2,1}; 

cl_float4 c = a - b; 

這一切工作正常,但:

cl_float4 A = {1,2,3,4},b = {4,3,2,1};

cl_float4 c = a - b - b;

給出了一個錯誤: 「無效的操作數爲二進制表達式(cl_float4和cl_float4)」

+0

難道你沒有像x,y,z,w這樣的東西不是cl_float4的成員嗎? – CaptainObvious

+0

我剛剛複製粘貼你的代碼,我有這個錯誤。當我用s [0],s [1],etx代替x,y,z,w時,它對兩種情況都很好。 – CaptainObvious

+0

用s [0] -s [3]改變了x,y,z,w。仍然是同樣的事情。 – user1513100

回答

0

您需要定義從改變:

cl_float4 operator- (cl_float4 &V1, cl_float4 &V2){ 

cl_float4 operator- (**const** cl_float4 &V1, **const** cl_float4 &V2){ 

的原因是第一次操作(中間/臨時​​)的返回值不能隱式轉換爲cl_float4 &,但它可以隱式轉換爲const cl_float4 &