float in CArray



  • ZuK schrieb:

    AndyDD schrieb:

    Compiler meckert aber folgendes an: Verkürzung von 'const double' in 'float'.

    float f =3.14;  // Warnung Verkürzung von 'const double' in 'float'
    float f =3.14f; // ok
    

    Kurt

    Hallo Kurt,

    im Grunde hast Du damit Recht. Die Zuweisung eines direkten Wertes funktioniert ja auch so. Allerdings bekomme ich die Messwerte aus einer Messkarte geliefert. Dort hat man nur eine Referenz auf eine float-Variable innerhalb einer Klasse, die durch den Treiber der Karte (Einbindung über mitgelieferte dll) bereitgestellt wird. Damit gehts zumindest aus meiner Sicht nicht so einfach. Ich habe ebenfalls noch mal nachgerechnet. Es fallen schlimmstenfalls 2x9000 Messwerte an und da ist es nicht unerheblich ob man float oder double nimmt.



  • Hallo.
    Irgendwie reden wir aneienaner vorbei.
    Also ich verstehe dich so: Der Treiber liefert dir eine Referenz auf float und du willst in deinen CArray floats abspeichern. Richtig ?
    Also wir wissen schon das CArray<float,float> funktioniert.
    Wo ist jetzt das Problem ?
    Mit meinem obigen Beispiel wollte ich nur demonstrieren dass die Warnung Verkürzung von 'const double' in 'float' nichts mit der Verwendung von CArray<float,float> zu tun hat.
    Ich nehme an dass du irgendwo zum testen code wie

    CArray <float, float> test;
    test.Add(3.5);
    

    verwendet hast. Dieser code bewirkt die obige Warnung und du schliesst daraus dass CArray <float, float> nur mit double funktioniert. Dem ist aber nicht so.
    Falls ich mich irren sollte poste doch einmal die Zeile code wo die Warnung auftritt.
    Kurt



  • ZuK schrieb:

    Hallo.
    Irgendwie reden wir aneienaner vorbei.
    Also ich verstehe dich so: Der Treiber liefert dir eine Referenz auf float und du willst in deinen CArray floats abspeichern. Richtig ?
    Also wir wissen schon das CArray<float,float> funktioniert.
    Wo ist jetzt das Problem ?
    Mit meinem obigen Beispiel wollte ich nur demonstrieren dass die Warnung Verkürzung von 'const double' in 'float' nichts mit der Verwendung von CArray<float,float> zu tun hat.
    Ich nehme an dass du irgendwo zum testen code wie

    CArray <float, float> test;
    test.Add(3.5);
    

    verwendet hast. Dieser code bewirkt die obige Warnung und du schliesst daraus dass CArray <float, float> nur mit double funktioniert. Dem ist aber nicht so.
    Falls ich mich irren sollte poste doch einmal die Zeile code wo die Warnung auftritt.
    Kurt

    Hi Kurt,

    ja ich habe genau diese Zuweisung. Allerdings steht statt der 3.5 eine Variable fVoltage vom Typ float, die vorher mit einem Wert aus der Karte belegt wird. Ich habe ja nicht gesagt das es nicht geht, ich wollte nur wissen wie man die Warnungen wegbekommt. Möglicherweise kann man die ja auch unbeachtet lassen. Allerdings weiß ich genau das eben nicht, da ich noch nicht so lange programmiere und noch nicht die Erfahrung habe wie andere hier. Hat es nun Nachteile wenn man das unbeachtet lässt?



  • AndyDD schrieb:

    ja ich habe genau diese Zuweisung. Allerdings steht statt der 3.5 eine Variable fVoltage vom Typ float, die vorher mit einem Wert aus der Karte belegt wird.

    Wenn du dort eine Variable vom Typ float hast dann darf es auch keine Warnung geben. Poste mal etwas code.
    Kurt



  • Ok, hier ein wenig Code. Hoffe das genügt.

    ...
    float fVoltage;
    
    //Read one data
        ptAIVoltageIn.chan = usChan;              // input channel
        ptAIVoltageIn.gain = 0;                   // gain code: refer to menual for voltage range
        ptAIVoltageIn.TrigMode = 0;               // 0: internal trigger, 1: external trigger
        ptAIVoltageIn.voltage = &fVoltage;        // Voltage retrieved
    
    ...
    
    CArray <float,float> Testarray;
    Testarray.Add (fVoltage);
    ...
    

    Dann kommt folgende Fehlermeldung:

    warning C4305: '=' : Verkuerzung von 'const double' in 'float'

    Auch mit Variable klappt es nicht. Eine direkte Zuweisung einer als float gekennzeichneten Zahl wie oben dargestellt funktioniert.



  • Und die Warnung kommt in dieser Zeile ?

    Testarray.Add (fVoltage);
    

    Dann muss VC etwas verwirrt sein.
    Kurt



  • Gegen Verwirrung hilft oft "Alles neu erstellen". 🙂
    Ob es hier hilft weiß ich nicht, aber einen Test ist es wert.



  • Ja die Warnmeldung kommt in der Zeile

    Testarray.Add (fVoltage);
    

    Habe auch schon alles neu erstellt. Dazu hab ich mir eine kleine dialogbasierte Anwendung erstellt und die wesentlichen Teile nochmals implementiert.
    Habe auch das SP 6 installiert. Bin langsam am verzweifeln 😕



  • Naja wie es aussieht machst du scheinbar alles richtig. Der Variablentyp ist richtig. Der CArray-typ ist richtig dann kanns wahrscheinlich auch nicht schaden wenn du mit

    Testarray.Add ((float)fVoltage);
    

    den compiler zum schweigen bringst.
    Kurt



  • AndyDD schrieb:

    Habe auch schon alles neu erstellt. Dazu hab ich mir eine kleine dialogbasierte Anwendung erstellt und die wesentlichen Teile nochmals implementiert.

    Das ist nicht das "Alles neu erstellen", was ich meinte.
    Das was ich meinte, findest du im Menü "Erstellen". 😃

    Aber wenn schon ein neues Projekt nicht hilft... 🙄



  • wenn du dir absolut sicher bist, das da nur float Werte kommen, dann würde ich es auch einfach nochmal in float casten.

    Aber nochmal zur Sicherheit 😃

    ...
    float fVoltage;
    fVoltage = 1.67f;

    //Read one data
    //do nothing ptAIVoltageIn.chan = usChan; // input channel
    //do nothing ptAIVoltageIn.gain = 0; // gain code: refer to //do nothing menual for voltage range
    //do nothing ptAIVoltageIn.TrigMode = 0; // 0: internal
    //do nothing trigger, 1: external trigger
    //do nothing ptAIVoltageIn.voltage = &fVoltage; // Voltage retrieved
    ...

    CArray <float,float> Testarray;
    Testarray.Add (fVoltage);
    ...

    erzeugt keine Warnung, oder? Ich schätze eher der Compiler meint irgendwo
    ne andere Konvertierung und vertut sich nur in der Zeile 🙄



  • Ja es kommen nur float-Werte im Bereich zwischen 0.00 und 5.00. Der Compiler irrt sich sicher nicht in der Zeile, denn wenn man eine Zahl z.B. 3.18f added, dann meckert er nicht. Auch die Version

    Testarray.Add ((float)fVoltage);
    

    erzeugt trotzdem die Fehlermeldung. Bin total ratlos.... 😕


Anmelden zum Antworten