Domanda

Fatto questo semplice classe con MSVC ++ 6.0

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


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

suona bene se lo uso in:

main()
{
  Strg mvar(10);
}

Ma ora se lo uso in un'altra classe:

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

ottengo messaggio di errore: l'errore C2059: errore di sintassi: 'costante'

Potrebbe dirmi di più per favore?

Nessuna soluzione corretta

Altri suggerimenti

Dovrebbe essere:

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

variabili membro non statiche che non hanno costruttori di default (v in questo caso) dovrebbero essere inizializzati utilizzando liste di inizializzazione . Nelle funzioni (come principale) d'altra parte è possibile utilizzare la sintassi costruttore regolare.

Quello che il compilatore si lamenta è che si sta tentando di fornire istruzioni su come tonnellata un'istanza della v membro della classe all'interno della vostra definizione di classe, che non è consentita.

Il luogo per v instantiate sarebbe all'interno del contructor, o nella lista di inizializzazione del costruttore. Ad esempio:

All'interno del costruttore:

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

In initializer elenco:

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

Il modo corretto per farlo è l'ultimo (in caso contrario, v richiederebbe anche un costruttore di default e sarà inizializzata due volte).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top