Sprung VC6 auf VS2005: Viele Fragen wegen Fehlern



  • Hallo!

    Also, ich arbeite noch überwiegend mit VC6, da ich damit einfach am schnellsten bin.
    Aktuell starte ich mal wieder einen Versuch, davon wegzukommen und versuche mein Glück mit VC2005.
    Der Code compiliert einwandfrei unter VC6 und 2003.

    Mit VC2005 gibt es viele Fehler. 😞

    Plötzlich kennt er Variablen nicht mehr, die sonst bekannt waren. Das waren aber alles welche aus for-Schleifen, das habe ich mittlerweile hinbekommen.

    Aber was ist hcw? 😕 Gehört das zur Hilfe? Die scheint wahnsinnige Schwierigkeiten zu machen. 😮
    Viiiiele Warnings und ein paar Errors, die ich nicht verstehe. Ich habe an der Hilfe nichts gemacht, außer sie für das Projekt per Häkchen zu wünschen. 🙄

    Und ausgerechnet in einer wichtigen Klasse von Codeproject ist ein Fehler, den ich nicht verstehe. 😞

    CAMSDateEdit::CAMSDateEdit() :
    	DateBehavior(this),
    	Behavior(this) // required because DateBehavior derives virtually from Behavior
    {
    }
    
    error C2385: ambiguous access of 'Behavior'
    could be the 'Behavior' in base 'CAMSEdit'
    


  • Dann zeig doch mal deine komplette Vererbungshierarchie - möglicherweise hast du an einer Stelle ein "virtual" übersehen.



  • class CAMSEdit : public CEdit
    class Behavior
    class DateBehavior : virtual public Behavior
    class CAMSDateEdit : public CAMSEdit, public CAMSEdit::DateBehavior
    

    Meintest du das?

    Ich habe die Klassen von da: http://www.codeproject.com/editctrl/validatingedit.asp



  • estartu schrieb:

    class CAMSDateEdit : public CAMSEdit, public CAMSEdit::DateBehavior
    

    Meintest du das?

    Hat denn die Klasse CAMSEdit eine lokale Subklasse namens DataBehavior? Oder meinst du an der Stelle deine globale Klasse (in dem Fall wäre das "CAMSEdit::" zu viel).



  • Es gibt einen Diskussionsthread über eine Visual C++ 2005 Portierung des Codes auf The Code Project. Dort hat jemand genau dasselbe Problem wie du...

    You have to change that part in
    CAMSDateEdit::CAMSDateEdit() :
    DateBehavior(this),
    CAMSEdit::Behavior(this) //



  • CStoll schrieb:

    Hat denn die Klasse CAMSEdit eine lokale Subklasse namens DataBehavior?

    Ja, DateBehavior ist in CAMSEdit deklariert, also innerhalb der { }.
    In der Baumstruktur erscheint es auch untergeordnet.

    ...hab gerade den Post von Gideon gesehen, das guck ich mir mal an. 🙂



  • Gideon, wo ist die Diskussion? 😕
    Ich bekomme jetzt nämlich in der MessageMap der Klasse Warnungen. 😞

    warning C4407: cast between different pointer to member representations, compiler may generate incorrect code
    

    Das hatte ich bei meinem ersten Versuch auch schon (das mit dem Klassennamen davor ist ja relativ logisch), deswegen dachte ich, das wäre falsch... 🙄



  • Und nochwas: Wenn ich den geänderten Code unter VC6 compiliere, meckert er jetzt:

    error C2512: 'Behavior::Behavior' : Kein geeigneter Standardkonstruktor verfuegbar
    error C2614: 'CAMSDateEdit' : Unzulaessige Elementinitialisierung: 'Behavior' ist weder Basis noch Element

    😞
    Kann ich beim Compilieren unterscheiden, ob ich mit VC6 oder VC2005 compiliere? Ohne mir extra ein #define zu basteln? 😕



  • *push* 😞



  • Kannst Du das Pronlem mal auf ein klizekleines Beispiel reduzieren?
    Du musst auch bedenken, dass VC8 wesentlich Standard-Konformer ist als VC6.
    Wenn Du aber wissen willst, was "richtig" ist, dann solltest Du es mittels des Referenz-Compilers übersetzen lassen:
    http://www.comeaucomputing.com/tryitout/

    Aber wie gesagt, mach mal ein kleines Beispielprojekt, vielleicht kann man Dir dann helfen...



  • Jochen Kalmbach schrieb:

    Aber wie gesagt, mach mal ein kleines Beispielprojekt, vielleicht kann man Dir dann helfen...

    Kleiner als das, was man bei Codeprojekt runterladen kann?
    Ich werde es versuchen, kann etwas dauern, ich schiebe hier dann. 🙂



  • estartu schrieb:

    Kleiner als das, was man bei Codeprojekt runterladen kann?

    Hmmm... Du meinst 5000 Zeilen sind klein!? 😕



  • Okay, ich hab die Zeilen in dem Projekt nie gezählt. Hätte nicht gedacht, dass es so groß ist. 😮
    Ich habe ja nächste Woche viiiiel Zeit im Zug, da werde ich mal sowas in Mini-Form versuchen. 🙂



  • estartu schrieb:

    class CAMSEdit : public CEdit
    class Behavior
    class DateBehavior : virtual public Behavior
    class CAMSDateEdit : public CAMSEdit, public CAMSEdit::DateBehavior
    

    Meintest du das?

    Ich habe die Klassen von da: http://www.codeproject.com/editctrl/validatingedit.asp

    versuch doch, den DateBehaviours typedef aliase zu geben, und benutz dann die typedef namen.

    CAMSDateEdit::CAMSDateEdit() :
        DateBehavior(this),
        Behavior(this) // required because DateBehavior derives virtually from Behavior
    {
    }
    

    es ist gute praxis, die teile der initialisierungsliste in der reihenfolge aufzulisten, in der sie ausgeführt werden. also virtuelle basen zuerst.


Log in to reply