Komische Fehlermeldung, Compiler kaputt?



  • static const int c = 10; <- seit wann geht das so

    probiers mal so

    class Vector
    {
    private:
    int a;
    static const int c;
    public:
    int b;
    };

    const int Vector::c=10;

    btw. falsches forum ->c/c++



  • Aloha,

    die Frage ist, warum die Konstante eine Membervariable sein soll/muß ?

    Mach mal so :

    #include <iostream> 
    using namespace std;
    
    static const int c = 10;
    
    class Vector 
    { 
    private: 
        int a; 
    
    public: 
        int b; 
    }; 
    
    int main() 
    { 
        return 0; 
    }
    

    Damit ist c in der Klasse bekannt, Du kannst mit arbeiten, etc.

    Und das wichtigste, der Compiler ist wieder repariert... 😉

    Beste Grüße

    BOA



  • eigentlich sollte meine variante funktioniern



  • Aloha Sovok,

    war ein Parallelposting.

    Du warst halt schneller... 🙂

    Nu hat er halt die Qual der usw...

    Grüße

    BOA



  • @Sovok:
    Man darf integer Typen direkt in der Klasse so initialisieren, aber zB string oder ähnliches, muss man so verwenden wie du es gemacht hast.

    @BOA:
    vielleicht weil c zum Vector gehört? könnte zB eine interne Konstante sein die angibt um welchen Faktor der vektor bei einer reallokierung wachsen soll. Oder sonst etwas Vector bezogenes.



  • @shade du meinst konstanste integer
    aber auch statische konstante integer?



  • Aloha Shade,

    @Sovok:
    Man darf integer Typen direkt in der Klasse so initialisieren, aber zB string oder ähnliches, muss man so verwenden wie du es gemacht hast.

    Da stellt sich mir die Frage, warum der Code von Xenon net funzt. 😕

    @BOA:
    vielleicht weil c zum Vector gehört? könnte zB eine interne Konstante sein die angibt um welchen Faktor der vektor bei einer reallokierung wachsen soll. Oder sonst etwas Vector bezogenes.

    Beantwortet meine Frage nicht wirklich. Das einzige was ich gelten lassen würde, daß meine globale Variante "speichermordender" ist. Aber wenn ich als Entwickler mit den konstanten Werten spielen will, ist die Variante einfach mal übersichtlicher.

    Grüße

    BOA



  • BOA schrieb:

    @Sovok:
    Man darf integer Typen direkt in der Klasse so initialisieren, aber zB string oder ähnliches, muss man so verwenden wie du es gemacht hast.

    Da stellt sich mir die Frage, warum der Code von Xenon net funzt. 😕

    VC++6 ist alt, der kann halt kein C++ :p ne, er hat viele solche Bugs.
    Kompilier den Code doch mal mit dem comeau -> http://www.comeaucomputing.com/tryitout/

    vielleicht weil c zum Vector gehört? könnte zB eine interne Konstante sein die angibt um welchen Faktor der vektor bei einer reallokierung wachsen soll. Oder sonst etwas Vector bezogenes.

    Beantwortet meine Frage nicht wirklich. Das einzige was ich gelten lassen würde, daß meine globale Variante "speichermordender" ist. Aber wenn ich als Entwickler mit den konstanten Werten spielen will, ist die Variante einfach mal übersichtlicher.

    Warum?
    Was spricht dagegen Konstanten die zu einer Klasse gehören auch in diese Klasse zu packen? zB der Faktor um den der Vector wächst - was hätte der ausserhalb der Klasse zu scuhen - am Ende kann dann noch jeder darauf zugreifen -> das wollen wir vielleicht nicht.

    vielleicht ist diese Konstante auch die maximale Anzahl an erlaubten Objekten vom typ Vector.

    Im Prinzip ist ja nur wichtig: sie gehört zur Klasse.

    Du schreibst ja auch
    obj.foo();
    und nicht
    foo(obj);

    weil foo zur Klasse gehört - was du mit obj.foo() ja ausdrückst.

    Denn schließlich wurden static variablen genau deswegen erfunden: manchmal besitzt eine Klasse eine static Konstante - dann sollte der Code auch dies ausdrücken.



  • Aloha Shade,

    VC++6 ist alt, der kann halt kein C++ ne, er hat viele solche Bugs.
    Kompilier den Code doch mal mit dem comeau -> http://www.comeaucomputing.com/tryitout/

    Ich glaube Dir das mal ungesehen, was mich in meinem Glauben an Gott ( Microsoft ) tief erschüttert. 😉

    Warum?
    Was spricht dagegen Konstanten die zu einer Klasse gehören auch in diese Klasse zu packen? zB der Faktor um den der Vector wächst - was hätte der ausserhalb der Klasse zu scuhen - am Ende kann dann noch jeder darauf zugreifen -> das wollen wir vielleicht nicht.

    vielleicht ist diese Konstante auch die maximale Anzahl an erlaubten Objekten vom typ Vector.

    Im Prinzip ist ja nur wichtig: sie gehört zur Klasse.

    Du schreibst ja auch
    obj.foo();
    und nicht
    foo(obj);

    weil foo zur Klasse gehört - was du mit obj.foo() ja ausdrückst.

    Denn schließlich wurden static variablen genau deswegen erfunden: manchmal besitzt eine Klasse eine static Konstante - dann sollte der Code auch dies ausdrücken.

    Jaja, ich weiß, mit meiner Variante ist das OO-Konzept quasi null und nichtig, aber wie gesagt, bei Konstanten sehe ich das nicht so eng, weil allein schon der Ausdruck konstante Membervariable ein Widerspruch in sich ist.

    Da schüttelt es mich richtig...

    Das Prob bleibt für ihn trotzdem bestehen, wenn er mit Studio arbeitet. Also, Sovoks Variante, oder wie nun ? 😕

    Beste Grüße

    (der von Billy enttäuschte)
    BOA



  • BOA schrieb:

    bei Konstanten sehe ich das nicht so eng, weil allein schon der Ausdruck konstante Membervariable ein Widerspruch in sich ist.

    es heisst dann ja auch nicht so, sondern zB konstanter Member oder Memberkonstante.

    Du sagst ja zu int const C=3; auch nicht konstante Variabel, oder?

    Das Prob bleibt für ihn trotzdem bestehen, wenn er mit Studio arbeitet. Also, Sovoks Variante, oder wie nun ? 😕

    Jo, Sovoks Variante.

    (der von Billy enttäuschte)

    Dann besorg dir mal einen Compiler der etwas neuer ist - VC++6 ist aus dem Jahre 1998(!)

    Schau dir mal VC++7.1 an. Ich habe zwar nur den 7.0er, aber was man so vom 7.1er hört -> sau gut.



  • Aloha,

    danke für den Tip(p) mit dem Visual Studio 7.1.

    Bei einem größeren Zeitfenster werde ich wohl oder übel mir ein Update kaufen müssen und die Projekte mal im 7er übernehmen.

    Hast Du Erfahrung mit dem Umstieg ? Konntest Du problemlos die 6er Projekte in das 7er importieren ? Oder hast Du mit dem 7er angefangen ?

    Grüße

    BOA



  • Danke an alle, das Rpbolem ist gelöst, Sovoks Variante (4. Post) funktioniert.

    Mfg Xenon


Anmelden zum Antworten