Di solito quando si dispone di una variabile membro privata costante nella tua classe, che ha solo un getter, ma non setter, sarebbe simile a questa:C++ che definisce una variabile membro costante all'interno costruttore della classe
// Example.h
class Example {
public:
Example(const int value);
const int getValue() const;
private:
const int m_value;
};
// Example.cpp
#include "Example.h"
Example::Example(const int value)
: m_value(value)
{
}
const int Example::getValue() const
{
return m_value;
}
Ora che cosa Sto cercando di fare, è avere una variabile membro int costante come quella, ma invece di definirla nella sezione di inizializzazione in questo modo: : m_value(value)
Ho bisogno di prendere un altro oggetto - userò un vettore in questo esempio - come parametro del costruttore e impostare m_value in base all'oggetto parametro. In questo caso, cercherò di fare il formato del vettore + 1, se la dimensione è superiore a 0. Quindi questo è quello che ho fatto:
Example::Example(std::vector<Example*> myVec)
{
if (myVec.size()) {
m_value = myVec.size() + 1;
}
else {
m_value = -1;
}
}
ma ottengo un errore uninitialized member 'Example::m_value' with 'const' type 'const int'
e se m_value io init all'interno di inizializzazione sezione, ottengo l'errore assignment of read-only data-member 'Example::m_value'
che tutto ha senso per me, dovrei ottenere quegli errori, ma come potrei aggirarli?
Modifica: L'unico modo per modificare m_value
è all'interno dell'oggetto stesso (poiché m_value è privato). Avere solo getter mi limiterebbe dall'impostare m_value a qualcosa di diverso da ciò che è impostato nel costruttore. Traggo beneficio dall'avere costante int come variabile membro?
': valore_m (! MyVec.empty()? MyVec.size() + 1: -1)'? – hmjd
perché deve essere 'const'? – Nim
Per quanto riguarda il vostro aggiornamento - no, nessun vantaggio che posso vedere ... – Nim