Errore "the value of 'c' is not usable in a constant expression"

di il
1 risposte

Errore "the value of 'c' is not usable in a constant expression"

Buongiorno!
Chiedo aiuto per questo programma:
//Scrivere un programma che legga in input una matrice di interi e un array di interi e valuti se l’array è contenuto nella matrice (cioè se è un sotto-array di almeno una riga della matrice).
Provo a farlo partire e mi da questi errori:
1) [Error] array size in new-expression must be constant
2)[Error] the value of 'c' is not usable in a constant expression
3)[Note] 'int c' is not const

cosa sbaglio? scusate ma sono alle prime armi...

ecco ciò che ho scritto:


#include <iostream>
using namespace std;
int main()
{
//alloca array
int dim1;
int k;
cout<<"inserisci la dimensione dell'array"<<endl;
cin>>dim1;
int* v= new (nothrow) int[dim1];
for(int k=0;k<dim1;k++)
{cout<<"v["<<k<<"]=";
cin>>v[k];
}

int i,j;
int r;
int c;
//alloca matrice
cout<<"inserisci il numero di righe:"<<endl;
cin>>r;
cout<<"inserisci il numero di colonne:"<<endl;
cin>>c;

int** M=new int[r][c];
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{cout<<"M["<<i<<"]["<<j<<"]=";
cin>>M[j];
}
int cont;
for(int k=0;k<dim1; k++)
{
for (int i=0; i<r;i++)
{
for (int j=0; j<c; j++ )
{
if (v[k] == M[j])
cont = cont + 1;
}
}
}
if (cont==dim1)
cout<<"l'array è contenuto nella matrice"<<endl;
else
cout<<"l'array non è contenuto nella matrice"<<endl;

delete[] v;
delete[] M;
}

1 Risposte

  • Re: Errore "the value of 'c' is not usable in a constant expression"

    Ciao!

    - per postare il codice sul forum utilizza gli appositi TAG;
    - al fine di rendere il codice più chiaro e leggibile ti consiglio di scrivere codice indentato, di rispettare la spaziatura e di usare le parentesi graffe anche se il corpo della generica istruzione di controllo è costituito da una sola istruzione;
    - visto che nei due new una volta lo utilizzi e una volta no, sai a cosa serve (nothrow)?
    - perchè dichiari le variabili k, i e j due volte?
    - la parte sulla ricerca del sotto-array è completamente da rivedere, ma per il momento sorvoliamo e concentriamoci su altro...
    - il motivo per cui quel codice non compila è da attribuire alla seguente riga:
    int **M = new int[r][c];
    Sai come allocare dinamicamente una matrice (ossia un array bidimensionale)?
Devi accedere o registrarti per scrivere nel forum
1 risposte