72 votes

c++ array - l'expression doit avoir une valeur constante

J'obtiens une erreur lorsque j'essaie de créer un tableau à partir des variables que j'ai déclarées.

int row = 8;
int col= 8;
int [row][col];

Pourquoi est-ce que je reçois cette erreur :

doit avoir une valeur constante.

0 votes

Qu'attendez-vous int [row][col]; à faire, exactement ?

17 votes

Ne modifiez pas le code de votre question avec le correctif ; cela rend votre question extrêmement confuse pour les futurs lecteurs.

1 votes

@Brian Roach cette question n'est pas traitée. Limitez-vous pour faire une bonne réponse.

1voto

BigChief Points 1543

On pourrait aussi utiliser un vecteur de longueurs fixes et y accéder par indexation

int Lcs(string a, string b) 
{
    int x = a.size() + 1;
    int y = b.size() + 1;

    vector<vector<int>> L(x, vector<int>(y));

    for (int i = 1; i < x; i++)
    {
        for (int j = 1; j < y; j++)
        {
            L[i][j] = a[i - 1] == b[j - 1] ?
                L[i - 1][j - 1] + 1 :
                max(L[i - 1][j], L[i][j - 1]);
        }
    }

    return L[a.size()][b.size()];
}

1voto

py_G Points 45

En utilisant le compilateur GCC (que j'ai fait localement) et un compilateur en ligne ( lien ), un code similaire à celui de la question exécuté a fourni un nom de variable.

#include<iostream>

int main(){
    int r= 2, c=3;
    int arr[r][c];
    arr[0][1]= 3;
    std::cout<<arr[0][1];
}

Sortie : 3

Bien que je cite cplusplus.com ,

NOTE : Le champ elements entre crochets [], représentant le nombre d'éléments du tableau, doit être une expression constante car les tableaux sont des blocs de mémoire statique dont la taille doit être déterminée à la compilation avant l'exécution du programme.

Il semble que les compilateurs actuels aient été modifiés à cet égard. Il s'agit d'un standard C99 que les mainteneurs des compilateurs standards ont ajouté à leurs compilateurs.

Il n'est pas nécessaire d'avoir une déclaration const. Lors de la compilation, le compilateur substitue automatiquement la valeur.

Ce site La question fait le tour du sujet.

REMARQUE : Il ne s'agit pas d'une pratique de codage standard, et certains compilateurs risquent donc de générer une erreur.

-5voto

Non, il n'a pas besoin d'être constant, la raison pour laquelle son code ci-dessus est faux est qu'il doit inclure un nom de variable avant la déclaration.

int row = 8;
int col= 8;
int x[row][col];

Dans Xcode, cela compile et s'exécute sans problème, mais dans le compilateur C++ de M$ dans .NET, cela ne compile pas, il se plaint que vous ne pouvez pas utiliser un littéral non constant pour initialiser un tableau, la taille doit être connue au moment de la compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X