Различение между структурной индексацией и инициализацией размера - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь написать функцию, которая принимает массив структур и сортирует элементы массива в алфавитном порядке, обращаясь к первому элементу данных. Я изо всех сил пытаюсь заставить код различать guish, когда я обращаюсь к элементу данных против , инициализирующего размер массива . Например, следующий код

void selectionSort(struct A[], int size)
{
    int mindex;

    for (int ct1 = 0; ct1 < size - 1; ct1++)
    {
        mindex = ct1;
        for (int ct2 = ct1 + 1; ct2 < size; ct2++)
            if (A[ct2].state < A[mindex].state)
                mindex = ct2;
        swap(A[mindex], A[ct1]);
    }
}

жалуется, что ct2 не является константой, когда я явно использую его в качестве индекса. Как мне заставить это работать правильно? То есть, как я могу заставить его сравнивать элементы данных в их соответствующих индексах, а не думать, что я инициализирую размер структурной переменной?

Редактировать Я получаю сообщение об ошибке expression must have a constant value для переменной ct2.

1 Ответ

1 голос
/ 10 апреля 2020

Я думаю, у вас могут быть проблемы с тем, как вы создаете свою функцию. Обычно, когда вы объявляете массив структур, он выглядит следующим образом.

struct Student {
    int uid;
    string name;
};
Student studentArry[3];

Вы бы использовали 'Student' или имя вашей структуры для инициализации массива. Например, int arr [10] - это целочисленный массив размера 10, а Student arr [10] - это массив ученика размера 10.

Еще одно замечание, если вы пытаетесь создать функцию, которая передается структура, вы должны инициализировать структуру, прежде чем определить функцию. Этот код будет работать, потому что структура была объявлена ​​до того, как функция была.

#include <iostream>
using namespace std;

struct Student {
    int uid;
    string name;
};

void print(Student array[], int size){
    for(int i = 0; i < size; i++){
        cout << array[i].uid << endl;
        cout <<array[i].name<< endl;
    }
};

int main(){

    Student StudentRecords[2] = {
        {19, "John Smith"}, 
        {21, "Jim Pop"}
    };

    print(StudentRecords, 2);

    return 0;
}

Код ниже не будет, потому что функция печати не знает, какой тип ученик.

#include <iostream>
using namespace std;

void print(Student array[], int size){
    for(int i = 0; i < size; i++){
        cout << array[i].uid << endl;
        cout <<array[i].name<< endl;
    }
};

int main(){

    struct Student {
        int uid;
        string name;
    };

    Student StudentRecords[2] = {
        {19, "John Smith"}, 
        {21, "Jim Pop"}
    };

    print(StudentRecords, 2);

    return 0;
}

Итак, в общем, я думаю, вам нужно изменить способ создания параметра для функции и, возможно, место, где вы объявляете свою структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...