2 votes

Je ne sais pas comment réparer l'erreur "Référence du membre".

J'ai des problèmes dans mon fichier main.cpp où le programme me dit que Member reference base type 'int [11]' is not a structure or union pour ma ligne QuickSort et ma boucle for également. Ensuite, dans la ligne cout, il est écrit Adding 'int' to a string does not append to the string and "Use array indexing to silence this warning .

Voici mon fichier main.cpp où se situe mon problème.

#include <iostream>
#include "QuickSort.h"
using namespace std;

int main() {
     int F[] = {12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18};
     QuickSort(F, 0, F.length-1);
     for (int i = 0; i<F.length; i++){
       cout << F[i] + " ";
    } 
    return 0;
}

Juste au cas où vous auriez besoin de mon autre code à déchiffrer. Voici mon fichier QuickSort.h :

using namespace std;
class QuickSortRecursion{
    public:
    QuickSortRecursion();
    int Partition (int a[], int low, int high);
    void QuickSort(int a[], int low, int high);
private:
};

Voici mon fichier QuickSort.cpp :

QuickSortRecursion::QuickSortRecursion(){
    return;
}
int QuickSortRecursion::Partition(int a[], int low, int high){
    int pivot = high;
    int i = low;
    int j = high;
    while (i<j){
        if (a[i] <= a[pivot]){
             i++;
        }if (a[i] > a[pivot]){
            if ((a[i] > a[pivot]) && (a[j] <= a[pivot])){
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
                i++;
            } if (a[j] > a[pivot]){
                j--;
            }
        }
    }
    int temp = a[i];
    a[i] = a[pivot];
    a[pivot] = temp;
    return i;
}

    void QuickSortRecursion::QuickSort(int a[], int low, int high){
    if (low >= high){
        return;
    }
    int split = Partition (a, low, high);
    QuickSort(a, low, split-1);
    QuickSort(a, split+1, high);
}

1voto

user4581301 Points 18060

En

int main() {
     int F[] = {12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18};
     QuickSort(F, 0, F.length-1);
     for (int i = 0; i<F.length; i++){
       cout << F[i] + " ";
    } 
    return 0;
}

F est un tableau et les tableaux n'ont pas de membres donc il n'y a pas de F.length .

Solutions (par ordre de préférence personnelle)

Utilisez std::size s'il est disponible (Nouveau dans C++17).

int main() {
     int F[] = {12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18};
     QuickSort(F, 0, std::size(F)-1); 
     for (int i = 0; i<std::size(F); i++){
       cout << F[i] + " ";
    } 
    return 0;
}

Utilisez std::vector au lieu d'un tableau brut. std::array est plus adapté, mais je n'ai pas de bonne formule pour rendre

std::array<int> F = {12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18};
              ^
              Need to specify array size here, and if you knew that you there 
              wouldn't be a problem.

Exemple avec std::vector

int main() {
     std::vector<int> F = {12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18};
     QuickSort(F.data(), 0, F.size()-1); 
     for (int i = 0; i<F.size(); i++){
       cout << F[i] + " ";
    } 
    return 0;
}

Utilisez sizeof pour obtenir la longueur en octets et la diviser ensuite par le sizeof un élément pour obtenir le nombre d'éléments dans le tableau

int main() {
     int F[] = {12, 2, 16, 30, 8, 28, 4, 10, 20, 6, 18};
     const int length = sizeof(F) / sizeof(F[0]);
     QuickSort(F, 0, length -1); 
     for (int i = 0; i<length ; i++){
       cout << F[i] + " ";
    } 
    return 0;
}

Notes d'accompagnement

Si vous avez un constructeur qui ne fait rien, laissez le compilateur le générer.

Si vous avez une classe qui n'a pas d'état (variables membres), pensez à en faire une namespace à la place.

Le cloisonnement ne semble pas correct. On dirait que vous essayez de Partitionnement de Lomuto mais ils sont un peu à côté.

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