2010-11-03 77 views
1

這是我的問題。我有一個構造函數,使從4個浮點取值範圍爲0到1.我要添加0到255 INT兼容性,所以我有另一個構造這樣的顏色:問題與int浮動

AguiColor::AguiColor(int r, int g, int b, int a) 
{ 
double num = 1.0f/255.0f; 
    AguiColor((float)(r * num), (float)(g * num), (float)(b * num), (float)(a * num)); 

} 

然而,這是行不通的。 rgba浮點組件變成奇怪的數字。這有什麼問題?

由於

+0

你是什麼意思的「奇怪的數字」?即你期望得到什麼數字,你得到了什麼數字? – AndyG 2010-11-03 00:20:54

+0

爲什麼你不提供兩個構造函數? – 2010-11-03 00:28:31

+0

@Ed:基於「我有另一個構造函數」以及他獲取垃圾數據,而不是堆棧溢出的事實,我很確定他有兩個構造函數。 – 2010-11-03 00:31:43

回答

4

C++ 03不支持的構造授權(A/K/A鏈)。當你調用其他的構造函數,Java風格時,它會創建一個臨時對象,而不會影響正在構建的對象。

這可能會修復它,但不如直接初始化成員那樣高效。

AguiColor::AguiColor(int r, int g, int b, int a) 
{ 
    double num = 1.0f/255.0f; 
    *this = AguiColor((float)(r * num), (float)(g * num), (float)(b * num), (float)(a * num)); 
} 
+0

做到了! – jmasterx 2010-11-03 00:24:55

+0

會造成內存泄漏,我應該先刪除它嗎? – jmasterx 2010-11-03 00:38:44

+0

不,沒有內存泄漏。 – 2010-11-03 01:58:20