Problem: Code compiled net



  • class Base
    {
        static const int class_data=5;
    };
    
    class MyClass : public Base
    {
    };
    
    int func(Base* a)
    {
        return (*a::class_data);
    }
    
    int main()
    {
        Base base;
        MyClass mc;
    
        cout << func(&base) << ' ' << func(&mc) << endl;
    
      return 0;
    }
    


  • Die Frage ist, was du überhaupt erreichen möchtest?

    #include <iostream>
    
    class Base 
     {
     public: 
         static const int class_data=5; 
     }; 
    
     class MyClass : public Base 
     { 
     }; 
    
     int func(Base* a) 
     { 
         // Hier geht auch einfach:
         // return  Base::class_data;
    
         // oder auch:
         // (*a).class_data;
         return (a->class_data); 
     } 
    
     int main() 
     { 
         Base base; 
         MyClass mc; 
    
         std::cout << func(&base) << ' ' << func(&mc) << std::endl; 
    
       return 0; 
     }
    


  • AufmSchlauchSteher schrieb:

    return (*a::class_data);

    Was soll das sein? Der Scope-Operator erwartet auf der linken Seite eine Klasse oder einen Namensraum, nicht ein Objekt.
    Meinst du vielleicht:

    return Base::class_data;
    

    oder auch

    return a->class_data;
    

    Beides wäre syntaktisch korrekt. Allerdings ist class_data private und deshalb nicht von außen referenzierbar.



  • HumeSikkins schrieb:

    AufmSchlauchSteher schrieb:

    return (*a::class_data);

    Was soll das sein? Der Scope-Operator erwartet auf der linken Seite eine Klasse oder einen Namensraum, nicht ein Objekt.
    Meinst du vielleicht:

    return Base::class_data;
    

    oder auch

    return a->class_data;
    

    Klar, meine ich.

    Beides wäre syntaktisch korrekt. Allerdings ist class_data private und deshalb nicht von außen referenzierbar.

    Aber class_data ist doch static.



  • Bitte letzten Post ignorieren 😉



  • AufmSchlauchSteher schrieb:

    Aber class_data ist doch static.

    Und? Zu Fuß ist's auch schneller als über'n Berg. Das eine hat mit dem anderen aber nichts zu tun. Die Access-Level gelten in C++ unabhängig davon ob deine Daten/Methoden statische/nicht-statisch sind.


Anmelden zum Antworten