Frage

Aus dieser einfachen Klasse mit MSVC ++ 6.0

class Strg
{
public:
    Strg(int max);
private:
    int _max;
};


Strg::Strg(int max)
{
  _max=max;
}

Sounds gut, wenn ich es in:

main()
{
  Strg mvar(10);
}

Aber jetzt Wenn ich es in einer anderen Klasse verwenden:

class ok
{
public:
    Strg v(45);
};

Ich bekomme Fehlermeldung: Fehler C2059: Syntaxfehler: 'constant'

Könnten Sie mir sagen, mehr bitte?

Keine korrekte Lösung

Andere Tipps

Sollte sein:

class ok
{
public:
    Strg v;
    ok() : v(45) {}
};

Nicht-statische Member-Variablen, die sollte nicht Standardkonstruktoren (v in diesem Fall) initialisiert werden mit Initialisierung Listen . In Funktionen (wie Haupt) auf der anderen Seite können Sie die reguläre Konstruktor Syntax verwenden.

Was der Compiler über beschwert ist, dass Sie auf Anweisung zur Verfügung zu stellen versuchen, wie ton instantiate die Klasse Mitglied v in Ihrer Klassendefinition, was nicht erlaubt ist.

Der Ort, an instantiate v würde innerhalb des contructor sein, oder in der Initialisiererliste Konstruktor. Zum Beispiel:

Innerhalb Konstruktor:

class ok
{
public:
    Strg v;
    ok() {
        v = Strg(45);
    }
};

In Initialisiererliste:

class ok
{
public:
    Strg v;
    ok() : v(45) {}
};

Der richtige Weg, es zu tun, ist die letzte (sonst v auch einen Standardkonstruktor erfordern würde und zweimal initialisiert werden).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top