Partage
  • Partager sur Facebook
  • Partager sur Twitter

incompatible types in assignment of 'String' to 'S

incompatible types in assignment of 'String' to 'String [4]'

    12 mai 2019 à 11:07:40

    Bonjour,

    j'ai crée une fonction qui lit lit les paramètres d'une commande or, j'ai l'érreur de compilation suivante:

    I:\arduino_main\arduino_main.ino: In function 'void testCommand(String)':
    
    arduino_main:59: error: incompatible types in assignment of 'String' to 'String [4]'
    
         settings = *readCommand(Command,'_');
    
                  ^
    
    exit status 1
    incompatible types in assignment of 'String' to 'String [4]'

    Voici maintenant une partie du code:

    void testCommand(String Command)
    {
      delay(200);
      if (Command[0] == '/') {
        String settings[4];
        settings = *readCommand(Command,'_');
        Serial.println(settings[1]);
        if (settings[0] == '/start')
        {
          Serial.println(settings[1]);
        }
        else if (settings[0] == '/chrono')
        {
          Serial.println("Chrono");
        }
        else if (settings[0] == '/win')
        {
          Serial.println("Win");
        }
        else if (settings[0] ==  "3")
        {
          Serial.println("Position");
        }
        else if (settings[0] == "4")
        {
          Serial.println("question");
        }
      }
    }


    Et voici la fonction en question:

    String *readCommand(String command, char split){
      int j = 0;
      String settings[4];
      for(int i = 0; i <= command.length(); ++i){
        if(split == command[i]){
          j++;
        }else{
          settings[j] += command[i];
      }
      }
      return settings;
    }

    Merci beaucoup


    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2019 à 12:37:24

      Salut,

      Tu ne peux pas utiliser dans une fonction une variable déclarée dans une fonction inférieure. Quand une fonction est quittée, toutes les variables déclarées au sein de celle-ci sont détruites ou pas, mais de façon sûr à des états incertains et inexploitables à long terme sans une méchante chance de cornu. Donc ta table settings[4] n'existe plus une fois la fonction quittée.

      Ensuite, ta fonction retourne, en théorie, un pointeur sur string. Tu ne peux donc pas affecter un string à une variable de type "table de string". D'autant plus que si le contenu de ta table peut être variable, la table elle-même (l'adresse du premier élément de la table) est, lui, constant et ne peut être ré-affecté. Une table ne peut être copiée ainsi. Il faut copier le contenu d'une table vers une autre.

      Lorsque une fonction envoie ou retourne une table, cela se présente sous la forme d'un pointeur vers le premier élément de la table. La fonction qui reçoit cette valeur n'a rien d'autre que cette adresse et ne peut donc pas savoir s'il ne s'agît effectivement que d'un pointeur ou d'une table (dans l'intention du programmeur) et dans le second cas ne peut encore moins supposer de la taille de celle-ci.

      Enfin, attention avec l'arduino qui mélange assez facilement la classe "string" type C++ et la "table de char" utilisé en C. Juste ne pas s'emmêler les pinceaux.

      Si c'est une opération fréquente et que la mémoire te le permet, alors le plus simple est souvent de déclarer ta table en variable globale(*). Sinon, tu dois envoyer ta table depuis la fonction supérieure afin que la fonction inférieure la renseigne.

      Bonne continuation.

      (*) Je ne recommande généralement pas cette méthode, mais cela reste une pratique fréquente dans le monde de l'arduino..

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

      incompatible types in assignment of 'String' to 'S

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown