[Gelöst] [skinflatplus] warning: ‘<unnamed>.cSimpleContent::ContentType’ may be used uninitialized [-Wmaybe-uninitialized]

  • Ich versuche krampfhaft im Netz was zu finden, um die Meldung


    weg zu bekommen. Ich hab keine Ahnung wo ich da ansetzen muss. Leider kenn ich mich mit Programmieren nicht aus. Mit mühe und Not kann ich kleinere Änderungen einbauen. Bei anderen Skin's habe ich mich schon umgeschaut, aber nichts gefunden. Das mit dem ComplexContent scheint nur flatPlus zu haben…


    Das komplette Buildlog ist hier: https://launchpadlibrarian.net…dr0~jammy_BUILDING.txt.gz


    Den Fehler:

    Code
    warning: deleting object of polymorphic class type ‘cTextScroll’ which has non-virtual destructor might cause undefined behavior [-Wdelete-non-virtual-dtor]

    konnte ich schon lösen. Vielleicht hat ja jemand ne Idee? GIT in der Signatur

  • Ich mag nicht detailliert nachsehen, aber für mich bedeutet es, es gibt ein


    Code
    cSimpleContent::cSimpleContent(const cSimpleContent&)

    in dem ein Member namens


    Code
    ContentType

    vergessen wurde zuzuweisen. Da es ein copy constructor ist, muss die Variable wahrscheinlich vom Argument

    Code
    (const cSimpleContent&)

    kommen. Der Name dieser Variable ist dem compiler ja recht egal und taucht in der Meldung nicht auf..

  • In der complexcontent.h:

    Würde das gehen?:

    Code
    std::vector<cSimpleContent> Contents {};

    oder irgendwo in complexcontent.c?

  • Vielen Dank, aber ich kapier das einfach nicht.

  • Und nach dieser Zeile bitte ebenso default Werte zuweisen für


    int TextWidth, TextHeight, TextAlignment;

    tColor ColorFg, ColorBg;


    Das beseitigt dann wahrscheinlich die Warnung, aber nicht das Problem als solches.

    Die Klasse cSimpleContent wird in std::vector benutzt, deswegen muss sie zwei Bedingungen erfüllen: CopyAssignable and CopyConstructible.


    Den copy constructor gibt es noch nicht in der Klasse, gcc fügt einen ein, aber der ist anscheinend nicht komplett:

    "If no user-defined copy constructors are provided for a class type (struct, class, or union), the compiler will always declare a copy constructor as a non-explicit inline public member of its class. This implicitly-declared copy constructor has the form T::T(const T&)"


    mit T = cSimpleContent



    Die beste Idee wäre, zusätzlich einen copy constructor anzulegen für cSimpleContent. Vielleicht so, rhs steht für 'right hand side'


  • Danke für die Hinweise. Ich probier das aus, wenn ich Montag am VDR bin.


    Was kann ich als Vorgabe bei tColor nehmen? 0 oder NULL


    Und wo muss der copy constructor rein? Ab Zeile 44 in der .h steht fast das gleiche aber mit other statt rhs

    Auszug:

  • Am besten vor


    Code
     ~cSimpleContent() {


    PS: 'other' anstelle von rhs wäre völlig ok. Ich mag halt Bezeichnungen, die ich bei anderen Programmierern wieder finde und verstehe (oder glaube das zu tun.. :) ).

  • Danke sehr!


    Ich baue das ein und teste am Montag

  • Folgender Stand:

    Plugin baut mit dem 'copy constructor' von wirbel und dem Vorschlag von FireFly

    Das Zuweisen von den anderen Werten führt leider zu Warnungen:

    Wiederholt sich ein paar mal


    Die Datei sieht so aus: https://www.dropbox.com/s/05ub…nj7/complexcontent.h?dl=0 (Dropbox)

    Änderungen in Zeile 36 und der Block ab Zeile 41-52

  • Du musst in Zeile 37 das "int" vor "TextWidth = 0, ..." weglassen, weil damit neue lokale Variablen definiert werden (die danach nicht benutzt werden) und nicht die Membervariablen der Klasse initialisiert werden.


    Um am besten noch in dem enum ab Zeile 8 ein CT_NONE einführen und damit in Zeile 36 initialisieren anstatt mit CT_TEXT. Dann musst Du aber auch überall, wo ContentType geprüft wird, kontrollieren, dass er das nur die anderen CT_* bearbeitet.

  • Super! Baut nun ohne Warnungen. Test in Virtualbox sieht auch gut aus.


    Vielen Dank für die Unterstützung wirbel und FireFly


    :portal3

  • MegaV0lt

    Hat den Titel des Themas von „[skinflatplus] warning: ‘<unnamed>.cSimpleContent::ContentType’ may be used uninitialized [-Wmaybe-uninitialized]“ zu „[Gelöst] [skinflatplus] warning: ‘<unnamed>.cSimpleContent::ContentType’ may be used uninitialized [-Wmaybe-uninitialized]“ geändert.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!