warum darf ich meine classe nicht "div" nennen?



  • naja also ich hab ne klasse die heisst "div" jedenfalls bekomm ich dann immer vom kompiler (gcc 3.2) die meldung die funktion div sei nicht deklariert wenn ich eine instanz der klasse erstellen will. eine funktion namens div gibts ja in der stdlib aber die ist nicht inkludiert...
    woran kann das liegen... (sobald ich das teil anders nenne gehts der stört sich wirklich nur am namen)



  • Klassennamen sollten eh mit großen Buchstaben beginnen.
    ... Konvention ...



  • #include <conio.h>
    #include <iostream>
    
    class Div
    {
    public:
      Div(){std::cout<<"Ich bin der verbotene Div."<<std::endl;}
    };
    
    int main()
    {
      Div obj; 
      getch();
    }
    

    Das ist in der Tat o.k.

    Nachfolgend verweigert er, div zu kennen.

    #include <conio.h>
    #include <iostream>
    
    class div
    {
    public:
      div(){std::cout<<"Ich bin der verbotene div."<<std::endl;}
    };
    
    int main()
    {
      div obj; 
      getch();
    }
    

    Bei MSVC++ das gleiche Spiel. Nicht ganz verständlich, da div kein Schlüsselwort ist.



  • japro schrieb:

    naja also ich hab ne klasse die heisst "div" jedenfalls bekomm ich dann immer vom kompiler (gcc 3.2) die meldung die funktion div sei nicht deklariert wenn ich eine instanz der klasse erstellen will. eine funktion namens div gibts ja in der stdlib aber die ist nicht inkludiert...

    aber irgendwo inkludiert? ist div evtl ein makro, das mit ein wenig inline-assembler zaubert und quotient und rest ausgibt, statt nur eines wertes?

    tritt der fehler auch auf, wenn du testhalber mal nur ne klasse div machst, ohne vorher irgendwas zu inkludieren?



  • @volkard: ich bin auch etwas erstaunt. Gut, ich würde eine Klasse nie div nennen, aber von einem Verbot wusste ich bisher nichts. 😕



  • in der standardbibliothek gibt es schon eine funktion namens div.

    div_t __cdecl div (
            int numer,
            int denom
            )
    {
            div_t result;
    
            result.quot = numer / denom;
            result.rem = numer % denom;
    
            if (numer < 0 && result.rem > 0) {
                    /* did division wrong; must fix up */
                    ++result.quot;
                    result.rem -= denom;
            }
    
            return result;
    }
    


  • Erhard Henkes schrieb:

    @volkard: ich bin auch etwas erstaunt. Gut, ich würde eine Klasse nie div nennen, aber von einem Verbot wusste ich bisher nichts. 😕

    nach inkludieren der <windows.h> gibts ein makro namens max. da wundert mich gar nix mehr.
    ne simple funktionsdeklaration dürfte aber den compiler nicht so umhauen, daß er deswegen ne klasse namens div vergißt.



  • <MSVC7.1>Ein Makro scheint es nicht zu sein, aber irgendwas, was aus den Tiefen von <iostream> kommt (was ja wiederum cstdio, cstdlib und noch ein paar andere Header inkludiert, die den globalen Namensraum verseuchen)</MSVC7.1> Gerade bei einem kollisionsträchtigen Klassennamen wie "div" würde ich die Klasse einfach in einen namespace verfrachten. Das ist zwar keine direkte Problemlösung, aber immerhin ein Workaround, den man rechtfertigen könnte.



  • aber irgendwas, was aus den Tiefen von <iostream> kommt (was ja wiederum cstdio, cstdlib und noch ein paar andere Header inkludiert, die den globalen Namensraum verseuchen

    Wenn ich mich recht entsinne sind diese Header alle im Namensraum std und nicht im globalen ?



  • operator void sprach ja auch von einem Microsoft'schen verhalten, nicht vom Standard.

    Aber 'div' ist Sowieso nicht grade ein aussagekräftiger Name. Und grade die sind wichtig für lesbaren Code.


Anmelden zum Antworten