warum geht das (nicht)?



  • #include "stdafx.h"
    #include <iostream>
    
    class A 
    {
    public:         
        int x;
    
        class B
        {
        public:    
           B();
               int y;       
        };
    
        void modifyB ();
    };
    
    A::B::B() //Konstruktor
        { 
            y=0; 
        };
    
    void A::modifyB () 
        {
            A::B::y=10; // <== XXX
        } 
    
    int main(int argc, char* argv[])
    {   
        A einA; 
        einA.modifyB(); 
        return 0;
    }
    

    Das läßt sich fehlerfrei kompilieren.
    Aber beim ausführen wird der Wert 10 der 1. Vaiablen von A zugewiesen (hier x), vermutlich rein zufällig, wenn da was anderes stünde, würde das überschrieben.

    an der Stelle XXX verstehe ich das nicht:
    1. wenn man das nicht darf, warum meckert der Compiler nicht?
    2. wenn man das darf, warum gibt es ein falsches Ergebnis?



  • y solltest du mal static machen



  • @MaSTah
    hmmm...eigentlich ist das keine Antwort auf meine Fragen... 😉

    Und wenn ich y statisch machen, würde außerdem die Funktionalität grundlegend verändert, da jede Instanz auf das gleiche y zugreifen würde.



  • Das geht nicht.
    Und wenn dein Compiler (ich tippe mal auf MSVC wegen der stdafx.h) das compiliert, dann ist das ein Fehler seinerseits.

    sieh auch Klasse in Klasse



  • Original erstellt von <keinPlan>:
    **@MaSTah
    hmmm...eigentlich ist das keine Antwort auf meine Fragen... 😉

    Und wenn ich y statisch machen, würde außerdem die Funktionalität grundlegend verändert, da jede Instanz auf das gleiche y zugreifen würde.**

    Dass du keine Instanzen erstellt weißt du aber, oder???



  • nö, weiß ich nicht...

    int main(int argc, char* argv[])
    {   
        A einA; // <== was tue ich denn hier??? eine Instanz auf dem Stack erstellen, oder ?!?
        einA.modifyB(); 
        return 0;
    }
    

    Der C++ Builder kompiliert das übrigens erst gar nicht. Also ist das Ganze wohl ein Bug in MSVC 6.0 !



  • MaSTaH meint wohl, du erstellst keine Instanz von B.
    Ist hinter dem Link den ich gepostet hab auch erklärt.



  • *räusper* 5 Zeilen weiter unten: Inklassen Problem
    😉


Anmelden zum Antworten