Tomaten auf den Augen? "Die nicht initialisierte lokale Variable "o" wurde verwendet."
-
Hallo zusammen.
Kann mir jemand einen Tipp geben, was hier die o.g. Warnung erzeugt?
Objekt *Baugruppe::Kopie(bool deep) const { Objekt *o = new Baugruppe(*this); if (deep) o->CopyChildren(this, deep); return o; }Baugruppe ist von Objekt abgeleitet. Die Warnung bezieht sich auf die Zeile
o->CopyChildren(this, deep)Gruß
Matthias
-
hast nochmal alles neu gebaut? .cpp auch wirklich abgespeichert?
Welcher Compiler/IDE?
Eigentlich dürfte die Warnung nicht kommen wenn der Compiler wirklich auch den Quelltext zu schlucken kriegt, den du da gepostet hast.
-
Hi,
danke erstmal, dass sich jemand dieses Problems (?) annimmt.
pumuckl schrieb:
hast nochmal alles neu gebaut? .cpp auch wirklich abgespeichert?
Welcher Compiler/IDE?
Eigentlich dürfte die Warnung nicht kommen wenn der Compiler wirklich auch den Quelltext zu schlucken kriegt, den du da gepostet hast.1. Ja: Hatte die Funktion erst inline in der Klassendefinition, jetzt im .cpp.
2. Ja.
3. VS2008.... Ich habe witzigerweise andere Klassendefinitionen, die auch von Objekt abgeleitet sind, wo's keine Warnung gibt, z.B.
virtual Objekt *Kopie(bool deep = false) const { Objekt *o = new Bauteil(*this); if (deep) o->CopyChildren(this, deep); return o; }Und noch genau eine andere, wo es die gleiche Warnung gibt:
virtual Objekt *Kopie(bool deep = false) const { Objekt *o = new Projekt(*this); if (deep) o->CopyChildren(this, deep); return o; }Kann es an der Hierarchie liegen?
Objekt
- Bauteil
-- Baugruppe
-- ProjektSprich, kann ich in Bauteil irgendwas eingebaut haben, was diese Warnung als Folgefehler auslöst? Bauteil selbst erzeugt keine Warnung, siehe meine erste Codezeile in diesem Posting... Es gibt aber auch andere Klassen, die von Bauteil abstammen und das Problem nicht haben. Bin verwirrt.
-
Projekt bereinigen und neu bauen.
-
Michael E. schrieb:
Projekt bereinigen und neu bauen.
Hab's befürchtet. Na denne...
Trotzdem danke! Hatte schon an "Betriebsblindheit" / "Wald vor lauter Bäumen" und andere Konzepte gedacht.
Gruß
Matthias
-
Hey, das ist doch nur geraten ^^ Das Standardvorgehen halt bei seltsamen Fehlern, bevor man stundenlang umsonst einem nicht vorhandenen Fehler nachjagt. Obs was hilft, kann ich dir nicht sagen.
Was ist denn am Rebuilden so schlimm, dass du es "befürchet" hast?
-
Michael E. schrieb:
Hey, das ist doch nur geraten ^^ Das Standardvorgehen halt bei seltsamen Fehlern, bevor man stundenlang umsonst einem nicht vorhandenen Fehler nachjagt. Obs was hilft, kann ich dir nicht sagen.
Was ist denn am Rebuilden so schlimm, dass du es "befürchet" hast?
Na ja, einen normalen Rebuild (also in VS2008 "Projektmappe neu erstellen") habe ich schon ein paar hundertmal damit gemacht...
Ich fürchte, ich muss die entsprechenden Klassen einfach mal von vorne programmieren, weil ich irgendwo irgendwas versteckt habe, was vielleicht semantisch, syntaktisch, stilistisch und funktional absolut iO ist (na ja), aber den Compiler irritiert. IntelliSense läuft z.B. dank Templates auch nicht mehr richtig.
-
oder du gibst uns einen aufs wesentliche reduzierten, compilierbaren Codeabschnitt mit dem die Warnung bei dir immernoch auftritt...
-
Um auch mal ins blaue raus zu raten:
Kann es sein, dass das "o" da vielleicht sich auf ein anderes im erreichbaren Scope beziehen kann? (globale, Member usw.)
-
Leute, Leute, Leute,
ich hab's. Es lag daran, dass nur für
class Objektein Kopierkonstruktor
Objekt(const Objekt& ob)definiert war. Nicht aber für Bauteil, Baugruppe oder Projekt. Oder für eine der anderen zahlreichen Klassen. Warum VS2008 ausgerechnet bei den beiden gemeckert hat, und noch dazu mit dieser unsinnigen Warnung ist mir ein Rätsel.
Danke an Alle!
Gruß
Matthias
-
So unsinnig ist die Meldung gar nicht. Da für Bauteil kein Kopier-Konstruktor vorhanden war, ist o uninitialisiert.
-
Hätte dann nicht vorher eine Fehlermeldung kommen müssen?
-
Ich hab' mal alle Kopierkonstruktoren entfernt - weil der in Objekt nämlich just der triviale ist, und damit eigentlich "über", dachte ich.
Objekt(const Objekt &ob) { *this = ob };Dann gab's eine Fehlermeldung von wegen kein Kopierkonstruktor definiert.