PDA

Visualizza la versione completa : C++ costruttori


pietrol83
28-01-2010, 23:47
ciao a tutti. ho un problema con un pezzo di codice riguardante la creazione di una classe matrice. io ho fatto i seguenti codici:

matric.h

[CODE]
#ifndef _MATRICE_H
#define _MATRICE_H

typedef int tipoelem;

class matrice
{
pubblic:
matrice(int, int);
matrice creamatrice();
tipoelem leggimatrice(int, int);
void scrivimatrice(int, int, tipoelem);
matrice eseguiprodotto(matrice, int, int, matrice, int, int);
private:
int righe;
int colonne;
tipoelem matrix[righe][colonne];
}

#endif
[\CODE]

matrice.cpp
[CODE]
#include "matrice.h"
#include <iostream>

matrice(int riga, int colonna)
{
righe = riga;
colonne = colonna;
}

void matrice::creamatrice()
{
int i, j;
for(i = 0; i < righe; i++)
{
for(j = 0; j < colonne; j++)
{
cin >> matrix[i][j];
cout << " ";
}
cout << "\n";
}
}

tipoelem matrice::leggimatrice(int riga, int colonna)
{
return(matrix[riga][colonna]);
}

void matrice::scrivimatrice(int riga, int colonna, tipoelem elemento)
{
matrix[riga][colonna] = elemento;
}

matrice &matrice::eseguiprodetto(matrice matA, int rigA, int colA, matrice matB, int rigB, int colB)
{
if(colA != rigB)
{
cout << "il prodotto non si puo' effettuare!\n\n\n";
return 0;
}

tipoelem matC[rigA][colB] = 0;

for(int i = 0; i < rigA; i++)
{
for(int j = 0; j < colB; j++)
{
for(int p = 0; p < colA; p++)
{
matC[i][j] = matC[i][j] + matA[i][p]*matB[p][j];
}
cout << " ";
}
cout << "\n";
}

return(matC);
}
[\CODE]

quando lo compilo mi dà il seguente errore:
invalid use of undefined type 'class matrice'
questo alla linea 9 del file.h.
cosa c'è che non va? secondo me il costruttore sta fatto bene.

c_junior
28-01-2010, 23:52
perché invece di scrivere:

matrice creamatrice();

dovresti scrivere:

void creamatrice();

pietrol83
28-01-2010, 23:56
va beh io le correzioni le faccio man mano che correggo gli errori precedenti. cmq l'errore che riscontro io e che ho scritto nella discussione è relativo al primo costruttore, cioè a matrice(int, int);

Lawliet
29-01-2010, 00:09
Ciao pietrol83,
Attenzione a ricordarti di mettere il ; dopo che hai creato la classe.

matrice creamatrice();
come ha detto il compano precedentemente, dovresti cambiarlo, e così vale anche per il metodo dentro la classe.

pietrol83
29-01-2010, 00:21
il problema persiste. ho messo il ; alla fine della classe e ho anche cambiato il metodo creamatrice scrivendo void creamatrice. non è cambiato niente: mi da sempre lo stesso errore al primo costruttore.

Lawliet
29-01-2010, 00:46
Ora che ho provato, ci sono un sacco di errori, a partire che public si scrive con un b.. manca il costruttore (sai cosa è!?), in ogni caso devi aggiungere matrice(); e solitamente segue anche il distruttore...
E' sbagliato dichiarare tipoelem matrix[righe][colonne]; come privato. al massimo la crei quando vai a chiamare appunto il costruttore!
Ti ho già consigliato di studiare, fallo da un buon libro.. e non saltare cercando di svolgere esercizi del prof.

c_junior
29-01-2010, 00:55
Originariamente inviato da pietrol83
va beh io le correzioni le faccio man mano che correggo gli errori precedenti. cmq l'errore che riscontro io e che ho scritto nella discussione è relativo al primo costruttore, cioè a matrice(int, int);

veramente tu hai detto che l'errore era questo matrice creamatrice();
e alla riga nove io vedo matrice creamatrice(); non il costruttore matrice(int,int);

oregon
29-01-2010, 07:24
E dentro il .cpp deve essere

matrice::matrice(int riga, int colonna)

e non semplicemente

matrice(int riga, int colonna)

MacApp
29-01-2010, 10:33
Originariamente inviato da pietrol83
[CODE]

[\CODE]


usa "/" non "\" per chiudere i tag
;-)

Loading