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.


Anmelden zum Antworten