Bonjour à tous,

Voici le programme minimaliste de test pour mon problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
const char* Test::pC[] = { "lol", "lil", "lul" };
static class Test
{
public:
   static const char* pC[];
}
 
int main()
{
   std::cout << "Array size is : " << sizeof(Test::pC)/sizeof(char*) << std::endl;
 
   return 0;
}
Il ne compile pas, car :
main.cpp:12:54: error: invalid application of ‘sizeof’ to incomplete type ‘const char* []’
Si j'enlève ma classe, tout va bien.

Je comprend qu'une variable statique dans une classe, sera initialisée avant l'appel au main. Du coup, le code remplissant mon tableau, c'est pas vraiment interprété par le compilateur et donc, il n'est pas capable de dire quelle est la taille réelle du tableau. Pourtant, la syntaxe est juste en soit.

Je ne comprend pas vraiment ce comportement. Je vois bien que la taille du tableau ne peut être déterminée que lors de l'exécution, mais alors, cette syntaxe, comment se fait t-elle qu'elle soit juste ?

Pouvez-vous me détailler tout le comportement du compilateur dans un tel cas et pour j'ai ce message d'erreur ?