error: Expected '(' for function-style cast or type construction

имеется код:

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
const int m = 6, n = 6;

void chet(int** a) {
    cout << endl << "Четность элементов в столбце:"<<endl;
    for (int i = 0; i < m; i++) 
        for (int j = 0; j < n; j++) {
            int h = abs(a[j][i]) % 2;
            if (h == 0 && j < m - 1) continue;
            if (h == 1) break;
            if (h == 0 && j == m - 1) {
                cout << i+1 << endl;
            }
            else cout<<"в столбце не все элементы четные"<<endl;
        }
    cout << endl<<"Сумма элементов столбца и его номер:"<<endl;
        int sum=0;
    for (int i = 0; i < m; i++)
        if (a[i][i] < 0) {
            for (int j = 0; j < n; j++) {
                sum += a[j][i];}
            cout<<"сумма="<< sum<< " номер столбца:"<< i+1<<endl;
            sum = 0;
        }
}

int main() {
    int i, j;
    int a[m][n];
    srand(time(NULL));
    cout<<"данный массив"<<endl;
    for (i = 0; i < m; i++){
        for (j = 0; j < n; j++){
            a[i][j] = rand()%100 - rand()  % 100;  }}  

    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
            cout << setw(3) << a[i][j];
        cout << endl;
    }

    chet(int** a);
    return 0;
}

в строке 58(chet(int** a);) выводит ошибку Expected '(' for function-style cast or type construction. подскажите как ее исправить


Ответы (1 шт):

Автор решения: Harry

Пункт первый. При вызове функции тип аргумента не указывается. Вы же не вызываете что-то типа sqrt(double 2)?

Пункт второй. int a[m][n]; и int** a - это две очень большие разницы. И работать это не будет.

Раз уж у вас n и m - глобальные константы, то можете описать не

void chet(int** a) {

а

void chet(int a[][n]) {

тогда будет работать... Почти! Потому что у вас

int a[m][n];

m строк, n столбцов - а вы обращаетесь

for (int i = 0; i < m; i++) 
    for (int j = 0; j < n; j++) {
        int h = abs(a[j][i]) % 2;

наоборот - первый индекс до n, второй - до m... Они-то у вас одинаковы, но стоит вам изменить размеры, как все станет печально.

→ Ссылка