Initialiser dans le constructeur de la liste d'initialisation
Je suis en train d'initialiser un tableau dans mon constructeur intialization liste, et je veux que le tableau à la taille MAX_SIZE, qui est un public static const dans ma Pile de classe. Comment puis-je le faire fonctionner? Le compilateur se plaint, disant qu'ils ont des types incompatibles dans la tâche de "double" à " double[0u]'
Voici mon code:
class Stack {
public:
Stack();
static const unsigned MAX_SIZE;
private:
double array[];
unsigned elements;
}; //class Stack
Stack::Stack(): array( array[MAX_SIZE] ), elements(0) {}
const unsigned Stack::MAX_SIZE = 4;
Merci d'avance pour votre aide.
Sauf si vous êtes complètement masochiste:
Est-il un moyen plus simple peut-être? c'est à dire sans l'aide de vecteurs. Comment puis-je obtenir le programme d'accepter mon tableau de données de membre avec sa taille de MAX_SIZE?
Je voudrais obtenir utilisé à l'aide de
Il y a des raisons valables pour éviter de vecteur. Vecteur initialise toujours sur un segment de mémoire tout en un tableau peut être initialisé sur la pile.
static const unsigned max_size = 4; std::vector<double> array; Stack::Stack() : array(MAX_SIZE){}
Est-il un moyen plus simple peut-être? c'est à dire sans l'aide de vecteurs. Comment puis-je obtenir le programme d'accepter mon tableau de données de membre avec sa taille de MAX_SIZE?
Je voudrais obtenir utilisé à l'aide de
std::vector
. J'utilise rarement des tableaux; je vais utiliser un std::vector
être de préférence presque tous les temps. Le code @Jesse Bonne a donné devrait fonctionner aussi bien.Il y a des raisons valables pour éviter de vecteur. Vecteur initialise toujours sur un segment de mémoire tout en un tableau peut être initialisé sur la pile.
OriginalL'auteur Sean | 2012-06-04
Vous devez vous connecter pour publier un commentaire.
Mais,
std::vector
serait mieux comme mentionné dans les commentaires.Raison pour laquelle je demande est la cause, j'ai lu différemment ici, que la définition devrait être en dehors de la classe: publib.boulder.ibm.com/infocenter/comphelp/v8v101/...
array()
dans le intializer liste zéro initialise tous les éléments. Vous avez raison, et je n'ai pas de définirMAX_SIZE
parce que je ne suis qu'à l'aide de sa valeur dans le code. DéfinirMAX_SIZE
à l'extérieur de la classe, si vous avez besoin de les utiliser ailleurs.Vous n'avez pas besoin d'une définition distincte pour un
static const <integer type>
variable comme vous le faites dans d'autres cas.Oui, c'est ce qu'on appelle
value initialization
.OriginalL'auteur Jesse Good