Формулировка цикла For - ERROR Базовый тип ссылки на член 'int [13]' не является структурой или объединением - PullRequest
1 голос
/ 14 октября 2019

В чем проблема с моим циклом for? Он находится внутри вспомогательной функции, но в моем коде происходит ошибка «Базовый тип ссылки на элемент« int [13] »не является структурой или объединением». 'Int [13] меняется на int [10], когда я использую массив из 10 целых чисел, поэтому я предполагаю, что это проблема там. Вот два примера:

        int newisbn13[13];
        newisbn13[0] = 9;
        newisbn13[1] = 7;
        newisbn13[2] = 8;
        for (int p = 3; p < newisbn13.length() - 1; p++)
        {
            newisbn13[p] = isbn10[p-3];
        }

ОШИБКА: Базовый тип ссылки на элемент 'int [13]' не является структурой или объединением

Также:

int calc_check_digit_13(int input[], int size) {
    int sum = 0;
    for (int i = 0; i < input.length(); i++)
    {
        int tempnum = 0;
        if (i % 2 == 0)
        {
            tempnum = input[i];
        }
        else if (i % 2 == 1)
        {
            tempnum = input[i] * 3;
        }
        sum = tempnum + sum;
    }
etc. etc. etc.
}

ОШИБКА: Базовый тип ссылки члена 'int *' не является структурой или объединением

Что вызывает эту ошибку во всем моем коде? Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Для вашего первого блока кода вы вызываете несуществующую функцию-член типа int. В C ++ int является примитивным типом и не имеет функций-членов или переменных-членов.

Для второго блока вы вызываете ту же функцию, но с указателем на массив int с, поэтому тип равен int *, а не int[13], но это в значительной степени точноета же проблема.

Как указал churill, вы можете использовать sizeof(int[]) или std::size(int[]), чтобы найти количество элементов в массиве. Если вам нужен контейнер для целых чисел, я бы порекомендовал использовать std::vector<int> для управления int s. Этот шаблонный класс имеет множество методов обеспечения качества жизни, таких как size(), которые могут помочь с тем, что вы, возможно, захотите сделать.

1 голос
/ 14 октября 2019

newisbn13 - это массив, и в отличие от других языков, таких как C # или Java, он не знает его размера.

Вместо него необходимо использовать sizeof(newisbn13). Или, начиная с c ++ 17, вы можете использовать std::size(newisbn13).

Однако это не будет работать для calc_check_digit_13. Потому что input будет затухать до указателя и ни sizeof, ни std::size не будут работать там. Но, вероятно, параметр size - это то, что вы хотите использовать.

for (int i = 0; i < size; i++) {...}

...