Structure wird von Funktion nicht angenommen



  • Ich auch nicht, der gcc hat damit kein Problem.



  • au mann *linux anwerf*

    Ich hab jetzt auch noch extra geschaut ob ich mich evt. vertippt habe oder so -> negativ. Compiler ist der vs compiler 6.0



  • So, habs jetzt unter Linux getestet, dort werden mir gleich 6 Fehler anstatt meinen drei gemeldet. Anscheinend lässt das Visual Studio da einfach was durchgehen. Damit ich ausschließen kann das ich mich vertippe poste ich jetzt den Originalcode:

    struct Zoomed
    
    {
    	unsigned int zoomed[4][10];
    };
    
    // Die Klasse
    class X
    {
    public:
    inline const Zoomed*       GetZoomedRuntimes() { return(&runtimesZoomed);                           };
    
    private:
    Zoomed runtimesZoomed;
    };
    
    // Die Funktion die das Array annehmen soll:
    // Überladen, der Compiler muss also die richtige Finden.
    unsigned int CalculateTotaltime(const unsigned int *runtimes) // eindimens.
    double CalculateTotaltime(const unsigned int &runtimesZoomed[4][10]) 
    
    // Der Aufruf:
    double totalTime   = CalculateTotaltime(GetZoomedRuntimes()->zoomed);
    

    Die Fehlermeldung (6x der gleiche Fehler):

    **
    error: invalid conversion from const unsigned int (*)[10]' tounsigned int (*)[10]'**

    Wer weiß was?



  • er kann const nicht zu nicht const konvertieren 😉



  • otze schrieb:

    er kann const nicht zu nicht const konvertieren 😉

    Die Fehlermeldung bleibt exakt die gleiche, auch wenn ich bei

    double CalculateTotaltime(const unsigned int &runtimesZoomed[4][10])
    

    das const weglasse:

    double CalculateTotaltime(unsigned int &runtimesZoomed[4][10])
    

    🙄



  • Nicht den Smilie falsch verstehen, wollte den nehmen :

    😕



  • müdermann1 schrieb:

    double CalculateTotaltime(const unsigned int &runtimesZoomed[4][10])
    

    Äh, Moment mal, das Refernzzeichen hast du im Original unterschlagen!

    So wie es jetzt ist, kann es aber auch nicht funktionieren, weil das ein Array von Referenzen wäre, und sowas gibts nicht.



  • Stimmt. Aber lass es weg, das macht keinen Unterschied.

    Hier ist eine der Originalfunktionen die aufgerufen werden (der Code im letzten Post von mir ist der Originalcode wie ich damit arbeite):

    void WriteSpreadsheet(const unsigned int runtimesZoomed[4][10])
    

    Aufruf:

    WriteSpreadsheet((*itPlayer)->GetZoomedRuntimes()->zoomed);
    

    Fehler:

    **
    error: invalid conversion from const unsigned int (*)[10]' tounsigned int (*)[10]'

    error: initializing argument 1 of `void
    WriteSpreadsheet(unsigned int (*)[10])'**

    Irgendwie hab ich das Gefühl das das etwas ganz billiges ist 😞



  • Hm auch mit dem gcc? Welche Version?

    Deklarier die mal testweise so:

    void WriteSpreadsheet(const unsigned int (*runtimesZoomed)[10]);
    


  • Problem gelöst, es war etwas ganz billiges 😡

    Ich hatte zwar in der cpp Datei gesagt "const unsigned int", aber vergessen das in der Header auch zu machen. Dort stand immer noch "unsigned int" 🙄

    Danke dir Bashar!


Anmelden zum Antworten