Newsgroup: it.comp.lang.c++
Titolo: error C2061: errore di sintassi: identificatore "fstream"

Ho scritto una classe che realizza una matrice. Al suo interno c'è una 
funzione per stampare la matrice su file ovviamente riceve in ingresso uno 
stream
La classe è la seguente
/* I want to define a Class Matrix that I use for resolving my problem */
#ifndef CMATRIX_H
#define CMATRIX_H
class CMatrix{
public:
//the costructor create a matrix of integer by receving the number of 
columns and rows;
//each elements of the matrix are inizialized with O
CMatrix(int n_column, int n_row );
//copy costructor
CMatrix (const CMatrix& mtr);
bool operator==( const CMatrix& mtr);
//get functions
int GetNum_column()
{
return num_column;
};
int GetNum_row()
{
return num_row;
};
int GetElemen(int x, int y)
{
return p_matrix[x][y];
};
void SetElemen(int elem,int x,int y)
{
p_matrix[x][y]=elem;
};
//insert value "val" in the position x row and y column
void insert ( int x, int y, int val);
// This function print on scream the matrix
void PrintMatrix(fstream str);
private:
int num_column;
int num_row;
int** p_matrix;
};
#endif
nella implementazione ho incluso ovviamente i seguenti file
#include "CMatrix.h"
#include <iostream>
#include <fstream>
#include <math.h>
Perchè quando compilo mi da i seguenti errori
h:\Programmazione\Copia di Copia di Gioco del cammello\CMatrix.h(46): 
error C2061: errore di sintassi: identificatore "fstream"
h:\Programmazione\Copia di Copia di Gioco del cammello\CMatrix.cpp(74): 
error C2511: "void CMatrix:rintMatrix(fstream)": funzione membro in 
overload non trovata in "CMatrix"
-- 
Using M2, Opera's revolutionary e-mail client: 
http://www.opera.com/m2/

 
Due errori. Innanzitutto 'fstream' è un nome del namespace 'std', quindi:
o lo importi nel namespace corrente
   using std::fstream;
o usi il prefisso 'std::' in ogni punto in cui nomini 'fstream'.
(Consiglio la seconda soluzione.)
In secondo luogo, le classi *stream della libreria standard non sono 
'copiabili', pertanto non puoi passare oggetti di quelle classi per valore.
Dichiara 'PrintMatrix' in questo modo:
 
  void PrintMatrix( std::fstream & str);
 
'notte,
Max



Mel file .cpp dichiaro la seguente cosa
using namespace std
e in effetti quello che dici è corretto, stavo sbagliando perchè dovevo 
passarlo per riferimento.
Peccato che anche scrivendo
void PrintMatrix(fstream & str)
gli errori rimangono. Inizio a pensare che il compilatore abbia qualche 
problema. Se serve posso aggiungere anche il file .cpp...
#include "CMatrix.h"
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
//Costructor
CMatrix::CMatrix(int n_column, int n_row)
{
	cout << "I'm the costructor" << "\n\n";
	num_column = n_column;
	num_row = n_row;
	p_matrix = new int*[num_row];
	for ( int i=0; i< num_row; i++)
	{
		p_matrix[i] = new int[num_column];
	};
	for (i=0; i<num_row; i++)
	{
		for (int j=0; j< num_column; j++)
		{
			p_matrix[i][j] = 0;
		};
	};
};
//copy costructor
CMatrix::CMatrix (const CMatrix& mtr)
{
	cout << "i'm copy costructor" << "\n\n";
	num_column = mtr.num_column;
	num_row = mtr.num_row;
	p_matrix = new int*[num_row];
	for ( int i=0; i< num_row; i++)
	{
		p_matrix[i] = new int[num_column];
	};
	for (i=0; i<num_row; i++)
	{
		for (int j=0; j< num_column; j++)
		{
			p_matrix[i][j] = mtr.p_matrix[i][j];
		};
	};
};
bool CMatrix::operator==( const CMatrix& mtr)
{
	for (int i=0; i<num_row; i++)
	{
		for (int j=0; j< num_column; j++)
		{
			if (p_matrix[i][j] != mtr.p_matrix[i][j])
				return false;
		};
	};
	return true;
};
//insert a value "val" in the casel [x][y]
void CMatrix::insert ( int x, int y, int val)
{
	p_matrix[x][y] = val;
};
// print the matrix on screen
void CMatrix::PrintMatrix(fstream& str)
{	int Ncifre=1;
	int Ncell=GetNum_row()*GetNum_column();
	while ( Ncell > int(pow(10,Ncifre)) )
	{
		Ncifre++;
	};
	for( int i=0; i<num_row; i++) // per ogni riga
	{
		cout << " ";
		for( int j=0; j<num_column; j++) //per ogni elemento della riga
		{
			int N_cifre=Ncifre;
			int NumZeri=0;
			int Elem=p_matrix[i][j];
			while ( Elem < int(pow(10,N_cifre))) //calcola quanti zeri deve mettere 
prima del numero
			{
				NumZeri++;
				N_cifre--;
			};
			if( Elem == 0)  //se come numero ho zero
			{
				for ( int k=0; k<NumZeri-1; k++)
					cout << "0";
				cout << " ";
			}
			else  //altrimenti
			{
				for ( int k=0; k<NumZeri-1; k++)
					cout << "0";
				cout << Elem << " ";
			};
		};
		cout << "\n\n";
	};
	cout << "\n";
};
Grazie
Maxdelo


 overload non trovata in "CMatrix"
Beh, qui mancha una 'p' nel nome della funzione.
Max



Grazie mille, davvero grazie. Ho spostato la direttiva "using" dentro il 
file di header e tutto è andato a posto. Come dicevi la direttiva using 
non era attiva dentro il file di header.
l'utilizzo dello std:: nn è male come idea.
