[Spiel] Findet die Fehler ...



  • Bis dahin mal was einfaches, sind ja nich nur cracks hier 😃 :

    template<class tBase>
    struct Asp
    {
       void MyFunc(typename tBase::tType t_)
          { cout << t_ << endl; }
    };
    
    struct Comp : public Asp<Comp>
    {
       typedef int tType;
    };
    
    int main()
    {
    Comp MyComp;
    MyComp.MyFunc(23);
    }
    

    c ya, cPanther



  • ich frag mich grad: ist der Fehler den ich seh ein echter ernstgemeinter fehler, oder einfach nur ein "ausm kopf falsch aufschreiber"?

    //edit ok, es war letzteres 😃



  • Ja, ja,... 😃



  • hübsch. kommt auch mal was, bei dem man nachdenken muss?



  • camper schrieb:

    hübsch. kommt auch mal was, bei dem man nachdenken muss?

    Ja kommt noch, aber denke mal etwas zu finden was dir nicht einfach erscheint wird schwer 😉



  • KasF schrieb:

    camper schrieb:

    hübsch. kommt auch mal was, bei dem man nachdenken muss?

    Ja kommt noch, aber denke mal etwas zu finden was dir nicht einfach erscheint wird schwer 😉

    3 Seiten rekursive templates sollten ausreichen um ein fehlendes ";" zu übersehen 😉



  • #include <stdio.h>
    typedef unsigned char u;u m[1024],g[1024],e[1024],b[1024];int n,v,d,z,S=129;a( u 
    *x,u *y,int o){d=0;for(v=S;v--;){d+=x[v]+y[v]*o;x[v]=d;d=d>>8;}}s(u *x){for( 
    v=0;(v<S-1)&&(x[v]==m[v]);)v++;if(x[v]>=m[v])a(x,m,-1);}r(u *x){d=0;for(v=0;v< 
    S;){d|=x[v];x[v++]=d/2;d=(d&1)<<8;}}M(u *x,u *y){u X[1024],Y[1024];bcopy(x,X,S 
    );bcopy(y,Y,S);bzero(x,S);for(z=S*8;z--;){if(X[S-1]&1){a(x,Y,1);s(x);}r(X);a(Y 
    ,Y,1);s(Y);}}h(char *x,u *y){bzero(y,S);for(n=0;x[n]>0;n++){for(z=4;z--;)a(y,y 
    ,1);x[n]|=32;y[S-1]|=x[n]-48-(x[n]>96)*39;}p(u *x){for(n=0;!x[n];)n++;for(;n< 
    S;n++)printf("%c%c",48+x[n]/16+(x[n]>159)*7,48+(x[n]&15)+7*((x[n]&15)>9)); 
    printf("\n");}main(int c,char **v){h(v[1],g);h(v[2],e);h(v[3],m);bzero(b,S);b[ 
    S-1]=1;for(n=S*8;n--;){if(e[S-1]&1)M(b,g);M(g,g);r(e);}p(b);}
    


  • Bittesehr 😉

    namespace kasf {
    
            class Super {
    
              private:
                      int tt;
              public:
                      Super() : tt(4) { }
                      Super(int z) : tt(z) { }
    
                      int get() const
                      { return tt; }
    
            };
    
            class MyClass {
    
              private:
                      int tau;
    
              public:
                      MyClass() : tau(12345) { }
                      MyClass(int z) : tau(z) { }
    
                      MyClass(const MyClass& obj) : tau(obj.tau)   { }
                      MyClass(const Super& obj)   : tau(obj.get()) { }
    
                      int get() const { return tau; }
    
                      class OTTO {
    
                        public:
                                unsigned long get() const { return 0xDEAD; }
    
                      };
    
                      int add(int val) { return tau + val; }
                      int add(const Super& sup) { return tau + sup.get(); }
    
                      friend ostream& operator<<(ostream& stream, const MyClass& obj);
            };
    
            ostream& operator<<(ostream& stream, const MyClass& obj)
            {
                stream << obj.tau;
                return stream;
            }
    
            int add(unsigned long t,const MyClass::OTTO& obj)
            {
                return obj.get() + t;
            }
    
            int add(unsigned long t,const Super& obj)
            {
                return obj.get() + t;
            }
    }
    
    int add(unsigned long t,const kasf::MyClass::OTTO& obj)
    {
        return obj.get() + t + t;
    }
    
    int add(unsigned long t,const kasf::Super& obj)
    {
        return obj.get() + t + t;
    }
    
    int main()
    {
    
       kasf::MyClass a;
       kasf::MyClass b = kasf::Super(), c(kasf::Super()), d(b);
    
       cout << kasf::MyClass() << endl << a << endl << b.get() << endl;
    
       kasf::MyClass::OTT0 otti;
       add(0xBEEF, kasf::MyClass::OTTO() );
    
       cout << kasf::MyClass(44) << endl << c << endl << d.add(5) << endl;
    
    }
    

    Edit: Sagt mir wieviel Fehler ihr findet 😉
    Edit2: Nochmal war reingebaut 😉



  • otze schrieb:

    3 Seiten rekursive templates sollten ausreichen um ein fehlendes ";" zu übersehen 😉

    Da wären vllt noch eins zwei Sachen wo camper vielleicht nicht direkt draufkommen würde :). Beim letzen Beispiel sind ja nur bekannte Sachen, obwohl ich denke das ihr einen übersehen werdet 😃 und einer aber echt übel fies ist 😃

    Den fiesen löse ich deshalbt auch jetzt schonmal auf:

    kasf::MyClass::OTT0 otti; // Fehler
    

    Denn das letzte O bei OTTO ist eine NULL und kein O.



  • Muss ich jetzt auflösen, bevor einer geantwortet hat 🙂



  • Hat der Fehler irgendwas mit Koenig Lookup zu tun?



  • CStoll schrieb:

    Hat der Fehler irgendwas mit Koenig Lookup zu tun?

    Ja, einer.



  • KasF schrieb:

    CStoll schrieb:

    Hat der Fehler irgendwas mit Koenig Lookup zu tun?

    Ja, einer.

    einer? also ich hab keinen fehler gesehen (bis auf den otto-verschreiber), bis cstoll eben koenig lookup erwähnt hat. nachgeguckt und nu seh ich genau einen fehler.



  • Komisch, jetzt finde ich den Fehler, den ich oben im Sinn hatte, nicht mehr wieder. Aber dafür ist mir ein anderer aufgefallen in Zeile 78 (hoffe ich).



  • CStoll schrieb:

    Komisch, jetzt finde ich den Fehler, den ich oben im Sinn hatte, nicht mehr wieder. Aber dafür ist mir ein anderer aufgefallen in Zeile 78 (hoffe ich).

    😉



  • der fehler durch koenig lookup ist in zeile 83.



  • Achja, das waren auch schon beide:

    1.)

    c(kasf::Super())
    

    wird als Funktionsdeklaration gesehen:
    http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.19
    http://www.gotw.ca/gotw/075.htm

    2.)

    add(0xBEEF, kasf::MyClass::OTTO() );
    

    der Aufruf ist Mehrdeutig da auch die add's im Namespace kasf berücksichtigt werden:
    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Koenig#Answ



  • ajcPanther schrieb:

    Bis dahin mal was einfaches, sind ja nich nur cracks hier 😃 :

    template<class tBase>
    struct Asp
    {
       void MyFunc(typename tBase::tType t_)
          { cout << t_ << endl; }
    };
    
    struct Comp : public Asp<Comp>
    {
       typedef int tType;
    };
    
    int main()
    {
    Comp MyComp;
    MyComp.MyFunc(23);
    }
    

    c ya, cPanther

    Der Fehler ist doch hier der das bei der Instanzierung Asp<Comp> hier oben dann

    void MyFunc(typename tBase::tType t_)
    

    Comp::tType gar nicht bekannt ist oder ? Wenn ja, wie löst man das Problem schön.

    otze schrieb:

    ich frag mich grad: ist der Fehler den ich seh ein echter ernstgemeinter fehler, oder einfach nur ein "ausm kopf falsch aufschreiber"?

    //edit ok, es war letzteres 😃

    Verstehe ich auch nicht irgendwie dazu.

    Aufklärung bitte 🙂

    *das Beispiel hat mich schon verrückt gemacht* 😮



  • KasF schrieb:

    ajcPanther schrieb:

    Bis dahin mal was einfaches, sind ja nich nur cracks hier 😃 :

    template<class tBase>
    struct Asp
    {
       void MyFunc(typename tBase::tType t_)
          { cout << t_ << endl; }
    };
    
    struct Comp : public Asp<Comp>
    {
       typedef int tType;
    };
    
    int main()
    {
    Comp MyComp;
    MyComp.MyFunc(23);
    }
    

    c ya, cPanther

    Der Fehler ist doch hier der das bei der Instanzierung Asp<Comp> hier oben dann

    void MyFunc(typename tBase::tType t_)
    

    Comp::tType gar nicht bekannt ist oder ? Wenn ja, wie löst man das Problem schön.

    Ohne Garantie - mit dem Schlüsselwort typename sagt man dem Compiler, daß sich hinter tBase::tType ein Typ verstecken soll - ob das wirklich so ist, prüft der Compiler, wenn er tBase kennt.

    otze schrieb:

    ich frag mich grad: ist der Fehler den ich seh ein echter ernstgemeinter fehler, oder einfach nur ein "ausm kopf falsch aufschreiber"?

    //edit ok, es war letzteres 😃

    Verstehe ich auch nicht irgendwie dazu.

    Aufklärung bitte 🙂

    Dort stand ursprünglich struct Comp : public Asp<Arg> 😉



  • Ahh, danke für die Aufklärung.

    Heute Abend kommt bissl was mit Vererbung, Polymorphie oder Exceptions ...


Anmelden zum Antworten