2010-11-06 134 views
0

我有一個叫PointF的類,它有一個構造函數,它需要一個Point,並且我不斷收到「可能丟失數據警告」。我怎麼能證明我的意圖實際上是將float的值變成int等等?我試過static_cast(float)但他們沒有解決警告。正確修復轉換和丟失數據警告?

例如:

int curPos = ceil(float(newMouseY/font.getLineHeight())) ; //float to int 

而且

outputChars[0] = uc; //converting from size_t to char 
+1

請爲您的問題添加一些示例代碼。 – 2010-11-06 22:49:30

+0

@奧利查爾斯沃思看到編輯 – jmasterx 2010-11-06 22:52:47

回答

1

的鑄造制應該做的伎倆; ,說:「明確地使這種類型的成式」,這通常是非常愚蠢的編譯器警告的:

int curPos = static_cast<int>(ceil(float(newMouseY/font.getLineHeight()))); 

或者:

outputChars[0] = static_cast<char>(uc); 

確保蒙上你嘗試過了類似的是。你說「我想...... (float)」,這使我相信,你嘗試過這樣的事情:

int curPos = (float)(ceil(float(newMouseY/font.getLineHeight()))); 

這什麼都不做。表達式的類型已經是float,那麼將它轉換爲相同的類型呢?您需要將其轉換爲目標類型。


請注意鑄件一般應避免使用。在你的第一個片段中,演員是合理的,因爲當你量化某些東西時,你一定需要放棄信息。

但你的第二個演員不是。爲什麼uc a size_t在第一位?當演員確實投放信息時會發生什麼?這真的是個好主意嗎?

+0

永遠不會發生雖然: \t如果(UC <= 0x7f)中的{ \t \t \t outputChars [0] =的static_cast (UC); \t \t \t return 1; \t \t} – jmasterx 2010-11-06 22:57:22

+0

它的Unicode, – jmasterx 2010-11-06 22:58:09

+0

@Milo:好的,檢查是一個有效的解決方案,雖然'0x7f'是一個非常神奇的數字。 – GManNickG 2010-11-06 22:59:12

0

您需要投下ceil的結果,最好使用static_cast

0

你可能必須使用一個明確的轉換,即

INT CURPOS = INT(小區(...));

0

您必須將您的變量轉換爲她通常好的方式更改類型。如果您嘗試將size_t轉換爲char,那麼您嘗試將4 bytes存入1 byte,這樣數據丟失是正常的事情。