2017-10-06 1 views
2

J'essaie d'utiliser une variable globale sur plusieurs fichiers cpp. Pour ce faire, j'ai ajouté la variable dans un fichier d'en-tête appelé system.h et créé une variable à l'intérieur de celui-ci:Le tableau global n'a pas 'type' lorsqu'il est ajouté au fichier d'en-tête dans le code C

extern int test_variable[]; 

Maintenant, dans mon file1.cpp J'inclus l'en-tête system.h et initialisés la variable avec des valeurs:

int test_variable[10] = {0,2,4}; 

In file2.cpp Je souhaite ajouter un nouveau numéro à la matrice, puis imprimer la matrice. system.h est également inclus dans la partie supérieure du fichier:

test_variable[4] = 7; 

void saveToSD(){ 
for(int i = 0; i < 10; i++) 
{ 
    Serial.print(test_variable[i]); 
} 

Cependant, je reçois une erreur indiquant que le test_variable dans le file2.cpp ne nomme pas un type. Qu'est-ce qui me manque puisque j'ai déjà initialisé son type dans le fichier d'en-tête et file1.cpp indique son type aussi?

+0

Est-ce C ou C++? –

+5

Vous ne pouvez pas avoir de code en dehors d'une fonction dans C. Parce que c'est en dehors d'une fonction, C pense que c'est une déclaration et que "test_variable" doit être un type. –

+2

Puisque vous programmez pour un Arduino, vous programmez C++. Ne marquez pas C et C++ (à moins que la question ne concerne réellement les deux langues) car cela tend à bouleverser les gens (et ce sont vraiment deux langues très différentes). –

Répondre

8

La ligne test_variable[4] = 7; est une affectation (plus généralement, une ligne de code exécutable), pas d'initialisation, et n'est donc pas autorisée en dehors d'une fonction.

Vous devez soit ajouter cette valeur lors de l'initialisation dans le fichier 1, soit déplacer l'affectation dans une fonction.

+0

merci pour la clarification. J'ai déplacé l'assignation dans 'saveToSD()' et fonctionne comme vous l'avez décrit. J'apprécie l'aide rapide :) acceptera quand il me permet de –