MSVC Warnings
-
also ich will die warning wegen einer typ-convertierung wegbekommen, aber erst mal ein stück code:
my::TMatrix <int> matrix3; //d.h. eine matrix mit dem valuetype int matrix3 = floatmatrix; //hier gibts keine probleme matrix3 *= 2.5f; //offensichtliches problem: int *= float
beim operator = wird der typ ja auch umgewandelt. (das wird allerdings in der allocator - funktion gemacht)
dort habe ich allerdings die implementation nicht von der deklaration getrennt - und somit im header die warning ausgeschaltet - muss ich die warnings also immer im header ausschalten? wenn ja, wieso?Die Implementation des operators sieht wie folgt aus:
//test.h //deklarationen #include "test.impl"
//test.impl #pragma warning(disable:4244) //... template <typename ValueType> template <typename ValueType_rhs> TMatrix<ValueType>& TMatrix<ValueType>::operator *= (ValueType_rhs skalar) { for(SizeType i = SizeType(); i != m.row_count; ++i) { m.rows[i] *= skalar; } return *this; } #pragma warning(default:4244)
ich hoffe, ihr könnt mir sagen, wie ich die warning doch noch wegbekomme...
falls ihr die noch mal braucht:warning C4244: '*=' : conversion from 'float' to 'int', possible loss of data see my::TMatrix::operator *= ... with [ ValueType=int, ValueType_rhs=float ]
danke, bb
edit: hatte vergessen zu zeigen, die warning wieder aktiviert zu haben...
edit: ich trottel hatte zu erst die warning ausgemacht und dann die alloc-header-datei included, die die warning ausmacht und dann wieder auf default setzt - is wohl dann direkt nen grund sich mit warning push / pop zu beschäftigen ^^
bb
-
Warum schaltest du die Warnung denn überhaupt aus? Sie macht an der Stelle absolut Sinn, da der Aufrufer ja darüber informiert wird, dass er hier Mist baut.