0
votes

Comment résoudre une erreur de multiples définition de swap dans c

Je reçois une erreur "Définition multiple de swap" de la fonction Swap. Ce code est pour le tri de sélection. xxx


3 commentaires

Merci pour les détails.


Quel compilateur utilisez-vous et comment l'appelez-vous? Vous devriez obtenir d'autres erreurs, en particulier avec principal .


En C ++, les fonctions doivent être déclarées avant leur utilisation.


3 Réponses :


2
votes

Vous devez renvoyer - déclarer le prototype de la fonction, de sorte que, si la fonction est appelée, le compilateur est conscient du type de retour de la fonction et des arguments attendus.

Ajouter P>

int swap (int [], int *, int *);


0 commentaires

2
votes

Vous devez inclure une méthode signature int Swap (int Arr [], int * i, int * j); avant utilisation (c'est-à-dire avant bidirectionnel ...). Comme c'est le cas, c crée une "déclaration implicite" qui ne conduit pas avec ce que vous avez écrit. Si vous utilisez GCC, vous pouvez ajouter -wall ou -WIMPLIMPLICITÉ ou -WIMPLICIT-FONCTION-DÉCLARATION À LA LIGNE DE COMMANDE afin qu'il vous indique que c'est ce qui se passe.


0 commentaires

0
votes

Le compilateur lit le fichier de haut en bas. Si elle voit échange code> par swap (arr, i, min_i); code> à l'intérieur du bidirectionalselectionsort code>, il ne sait pas ce que c'est.

Vous devez soit: P>

  1. Utilisez une déclaration d'avance pour la fonction Swap CODE> et placez-la avant la définition de BidirectionalSelectionsTRéstion CODE> LI> ol> xxx pré>

    ou p>

    1. Placez la définition de Swap code> avant la définition de la fonction de BidirectionalSelectionsTr. / code>. Li> OL>
      #include <stdio.h>
      #include <string.h>
      
      void swap (int **arr, int i, int j)
      {
          int temp = (*arr)[i];
          (*arr)[i] = (*arr)[j];
          (*arr)[j] = temp;
          return;
      }
      
      static void BiDirectionalSelectionSort(int arr[], int n)
      {
          for (int i = 0, j = n - 1;  i < j; i++, j--)
          {
              int min = arr[i], max = arr[i];
              int min_i = i, max_i = i;
              for (int k = i; k <= j; k++)
              {
                  if (arr[k] > max)
                  {
                      max = arr[k];
                      max_i = k;
                  }
      
                  else if (arr[k] < min)
                  {
                      min = arr[k];
                      min_i = k;
                  }
              }
      
      
              swap(&arr, i, min_i);
      
              if (arr[min_i] == max)
                  swap(&arr, j, min_i);
              else
                  swap(&arr, j, max_i);
          }
      }
      
      int main (void)
      {
          int arr[] = { 20, 15, 8, 10, 5, 7, 6, 2, 9, 1 };
          size_t n = sizeof (arr) / sizeof (*arr);
          BiDirectionalSelectionSort(arr, n);
          printf("Array:\n");
          for (size_t i = 0; i < n; i++)
          {
             printf("arr[%d] = %d\n", i, arr[i]);      
          }        
      }
      


5 commentaires

Bonjour merci de donner une solution et de la fixation de la minuscule erreur du code. Il semble que le code fonctionne bien, mais il n'y a pas d'affichage de sortie. Je reçois peu de messages d'avertissement qui a déclaré «échanger» rend le pointeur d'entier sans couler


@tyler premier, lequel des deux versions / méthodes utilisez-vous?


Les deux version sortent le même avertissement.


@tyler ah ok, alors il a quelque chose à voir avec votre code. Je vérifie actuellement.


@Tyler Votre code avait plusieurs problèmes problématiques. Trop pour expliquer tout en détail. Habituellement, je ne fais pas ça, mais j'ai réparé tous. Jetez un coup d'œil à ce que j'ai changé. Maintenant, tout fonctionne comme il devrait et donne la sortie souhaitée.