2012-11-23 46 views
1

我已經掌握了一些C++遊戲源碼,對於C++我很新,我已經成功編譯了源代碼,並且它看起來工作正常,但是有一些煩人的我無法解決的警告。擺脫與int32_t轉換相關的警告消息C++

我的C++編程技巧是非常基礎的,我對這些模板變量thingys有很大的問題。特別是這個名爲int32_t的模塊化模板,它似乎在我的資源中幾乎在任何地方都被使用。

我在int32_t上閱讀的文檔並不是很友好,它們非常正式,對於那些不知道如何使用它的人來說真的很難理解。 (嗯,我覺得我實際上可能會看錯地方)。

的一點是:

這裏是我有問題的功能:給定

int32_t Weapons::getMaxMeleeWeaponDamage(int32_t attackSkill, int32_t attackValue, float attackFactor) 
{ 
    return ((int32_t)std::ceil(((attackValue * 0.05) * attackSkill) + (attackValue))/attackFactor); 
} 

警告:

170 C:\編譯\ GameSources \武器。 cpp [Warning]轉換爲int32_t' from float'

線索是,我確實希望它計算浮點數,並返回一個int值。 (所以傷害計算是準確的,但遊戲客戶端上的傷害顯示會返回損傷的整數表示)。

所以據我所知,這個警告只是告訴我我想聽什麼。但是我怎麼能擺脫這個警告? (除了告訴我的編譯器忽略警告,我不希望這樣)。

+0

該警告只是讓你知道你可能做錯了事,如果你知道你正在做的一切正確,那麼你可以沉默警告。類似的討論在這裏:http://stackoverflow.com/questions/4262158/int-or-unsigned-int-to-float-without-getting-a-warning –

回答

2

您正在將ceil的返回值轉換爲int。然後你用浮點數分隔這個結果。你現在擁有的東西,你返回的價值是一個浮動。編譯然後必須將其轉換爲一個int。這是編譯器抱怨的後一種轉換。

我會說你錯了類型鑄造。

作爲一個風格問題,我建議您使用C++而不是舊的C風格鑄造。