Maximum MinimumFunktion



  • warum erhalte ich bei diesem code

    int qsplatdrr::Volume_MaxMin ()
    {
    int wv,hv,dv;            // 
    int w,h,d,v;
    Voxel vox;
    
                  w = qsplatdrrVolume -> Width;
    	h = qsplatdrrVolume -> Height;
    	d = qsplatdrrVolume -> Depth;
    	v = qsplatdrrVolume -> Value;
    
                            vox.X = wv;
    	          vox.Y = hv;
                            vox.Z = dv; 
    
    for (wv = 0; wv < w; wv++) {
    	    for (hv = 0; hv < h; hv++) {
    		for (dv = 0; dv < d; dv++) {	
    
    	if (v > volIntMax){
    	    v = volIntMax;   
    	}
    	if (v < volIntMin)
    	{
    	    v = volIntMin;
    	}	
        } } }
    return (volIntMax);
    return (volIntMin);
    }
    

    immer folgende warnungen:
    Warnung:int wv' might be used uninitialized in this function Warnung:int hv' might be used uninitialized in this function
    Warnung: `int dv' might be used uninitialized in this function

    k├Ânnte mir jemand helfen, was ich hier falsch mache?

    Danke!! ­čÖé



  • Englisch?

    vox.X = wv;
    vox.Y = hv;
    vox.Z = dv;
    
    for (wv = 0; wv < w; wv++) {
    for (hv = 0; hv < h; hv++) {
    for (dv = 0; dv < d; dv++) {
    

    Du benutzt wv, hv und dv oben auf der rechten Seite, weist ihnen aber erst danach unten einen Startwert (0) zu.



  • Hallo,

    immer folgende warnungen:
    Warnung:int wv' might be used uninitialized in this function Warnung:int hv' might be used uninitialized in this function
    Warnung: `int dv' might be used uninitialized in this function

    Da du wv, hv und dv nie initialisiert, sind ihre Startwerte undefiniert. Diese Werte weist du aber vox zu. Das ist das Problem. Initialisere die lokalen Variablen einfach mit 0 oder eben dem von dir gew├╝nschten Wert.

    EDIT: too slow...

    MfG

    GPC



  • int qsplatdrr::Volume_MaxMin ()
    {
    int wv,hv,dv;  // nicht initialisiert
    int w,h,d,v;
    Voxel vox;
    // ...
    vox.X = wv;  // Zuweisung von nicht initialisierten Variablen
    vox.Y = hv;
    vox.Z = dv; 
    // ...
    

    Besser w├Ąre wohl:

    int qsplatdrr::Volume_MaxMin ()
    {
    int wv = 0, hv = 0, dv = 0;  // mit 0 initialisieren
    int w = 0, h = 0, d = 0, v = 0;
    Voxel vox;
    // ...
    vox.X = wv;
    vox.Y = hv;
    vox.Z = dv; 
    // ...
    

    Dann d├╝rften die Warnings wegfallen.

    // EDIT: auch zu langsam ...



  • Danke f├╝r eure hilfe, habe das problem jetzt so gel├Âst....ich hoffe, dass das so auch passt....gibt zumindest keine warnings oder errors mehr aus:

    int qsplatdrr::Volume_MaxMin ()
    {
    int wv,hv,dv;  
    int w = 0, h = 0, d = 0, v = 0;
    Voxel vox; 
                  w = qsplatdrrVolume -> Width;
    	h = qsplatdrrVolume -> Height;
    	d = qsplatdrrVolume -> Depth;
    	v = qsplatdrrVolume -> Value;
    
    for (wv=0; wv < w; wv++) {
    	    for (hv=0; hv < h; hv++) {
    		for (dv=0; dv < d; dv++) {	
    	vox.X = wv;
    	vox.Y = hv;
                  vox.Z = dv; 
    
    	if (v > volIntMax){
    	    v = volIntMax;   
    	}
    	if (v < volIntMin)
    	{
    	    v = volIntMin;
    	}	
        } } }
    return (volIntMax);
    return (volIntMin);
    }
    


  • Klar, wenn die ├änderung an der Programmlogik so beabsichtigt war, passt das...

    Ach, und nimm bitte [ cpp] Tags ­čśë



  • return (volIntMin);
    

    wird niemals erreicht!



  • und wie kann das um├Ąndern, dass es erreicht wird?

    ps:sorry werd ab jetzt c++ tags verwenden



  • Hallo

    Das sieh so aus, als willst du zwei Werte zur├╝ckgeben. Das geht aber nicht so, wei du das machst.

    chrische



  • Gar nicht. Funktionen k├Ânnen nunmal nicht zwei Werte zur├╝ckgeben. Pack die beiden Werte doch als Referenz in die Parameterliste.



  • Devil's Daughter schrieb:

    und wie kann das um├Ąndern, dass es erreicht wird?

    ps:sorry werd ab jetzt c++ tags verwenden

    gar nicht, beim Ersten return springte er aus der Funktion raus. Aber du k├Ânntest ein struct zur├╝ckgeben, welches die beiden ints wrappt.

    MfG

    GPC



  • Das einfachste w├Ąre es auch, ein pair zur├╝ckzugeben:

    #include <utility>
    
    std::pair<int,int> qsplatdrr::Volume_MaxMin()
    {
      ...
      return std::make_pair(volIntMax,volIntMin);
    }
    
    ...
    qsplatdrr splat;
    pair<int,int> extrem = splat.Volume_MaxMin();
    cout<<"Max:"<<extrem.first<<", Min:"<<extrem.second<<endl;
    


  • oder mit referenzen arbeiten:

    void qsplatdrr::Volume_MaxMin(std::pair<int,int> &ausgabe)
    {
        ...
        ausgabe.first = volIntMax;
        ausgabe.second = volIntMin;
    }
    


  • Super vielen Dank f├╝r eure Vorschl├Ąge!!!!


Log in to reply