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!!!!


Anmelden zum Antworten