Error C2061: syntax error : identifier 'string'

di il
4 risposte

Error C2061: syntax error : identifier 'string'

Ciao a tutti!! Vi posto il codice sorgente e vi descrivo l'errore che il compilatore, visual studio2010, mi fornisce.
class CMyImage{
private:
	int Im[16386];
public:
	CMyImage();
	void ReadData(string nomefile);
	void WriteData(char *nomefile);
	void AggiungiRighe(int num);
	void Set(int x, int y, int num);
	int Get(int x, int y);
};
#include<iostream>
#include<fstream>
#include<string>
#include "CMyImage.h"

using namespace std;


CMyImage::CMyImage(){
 
for(int i=0; i<16386; i++){
	Im[i]=0;}
}

void CMyImage::ReadData(string nomefile){

	
	ifstream infile(nomefile);
	if(!infile)
		cerr<<"errore apertura file di input"<<endl;
	for(int i=0; i<16388; i++){
		infile>>Im[i];
	}
	cout<<"Formato"<<Im[0]<<endl;
	cout<<"Numero di righe"<<Im[1]<<endl<<"Numero di colonne"<<Im[2]<<endl;
	cout<<"Massimo valore di grigio"<<Im[3]<<endl;
	cout<<"Immagine"<<endl;
	
	for(int i=4; i<16388; i++){
		cout<<Im[i];
	}

	infile.close();
}
#include<iostream>
#include<fstream>
#include<string>
#include "CMyImage.h"

using namespace std;	
int main(){

	string nomefile="eye.pgm";
	CMyImage ob;
	ob.ReadData(nomefile);
	system("PAUSE");
}
Il compilatore mi fornisce i seguenti errori:
error C2061: syntax error : identifier 'string'
error C2511: 'void CMyImage::ReadData(std::string)' : overloaded member function not found in 'CMyImage'
error C2660: 'CMyImage::ReadData' : function does not take 1 arguments

Non capisco assolutamente il perche del secondo e il terzo. La funzione ReadData non è overloaded, e prende in ingresso un argomento. E sul primo errore non ho idea da dove possa venire.
Vi ringrazio in anticipo per l'aiuto
Ciao
Alessio

4 Risposte

  • Re: Error C2061: syntax error : identifier 'string'

    
    #include <string>
    using namespace std;
    
    class CMyImage{
    private:
       int Im[16386];
    public:
       CMyImage();
       void ReadData(string nomefile);
       void WriteData(char *nomefile);
       void AggiungiRighe(int num);
       void Set(int x, int y, int num);
       int Get(int x, int y);
    };
    
    La classe CMyImage non ha idea cosa sia lo string se non includi il header della classe string.
  • Re: Error C2061: syntax error : identifier 'string'

    Grazie mille! Ora provo ad effettuare la modifica..
  • Re: Error C2061: syntax error : identifier 'string'

    Passiamo alle ottimizazioni:
    1. Impara a non utilizzare le direttiva using namespace std; Adesso non hai problemi ma in programmi + complessi potrebbe esistere una funzione in due namespace diversi con lo stesso nome e il compilatore ti potrebbe dare dei problemi. Ciò però comporta mettere std::..... di fronte ad ogni classe/funzione inclusa in questo namespace. Ci si fà l'abbitudine non ti preoccupare.
    2. int Im[16386] // se vuoi una classe flessibile non mettere una grandezza fissa per l'array. E' meglio usare la classe std::vector che cresce quando servono dei dati. Cmq rimanendo nella tua implementazione questo pezzo di codice consuma del tempo per fare una cosa che si potrebbe fare in un riga sola.
    
    for(int i=0; i<16386; i++){
       Im[i]=0;}
    
    identico a:
    memset(Im,0,sizeof(int) * 16386);
    }
    
    3. Dichiarazione di void ReadData(string nomefile);
    siccome il nome del file è costante e non verrà vambiato all'interno della funzione sarebbe meglio passarlo per riferimento e mettere il const davanti quindi la dichiarazione cambia in:
    
    void ReadData(const std::string & nomefile);
    
    4. Inclusione dei header: Non includere MAI dei header che non siano indispensabili per lo svolgimento delle funzioni o dichiarazione delle variabili quindi:
    a) Nel MyImage.cpp #include <string> è superfluo perche incluso nel MyImage.h
    b) Nel main bastano solo questi header
    
    #include<iostream>
    #include "CMyImage.h"
    
  • Re: Error C2061: syntax error : identifier 'string'

    Non ci sono più errori. Quindi ti ringrazio!
    Per le ottimizzazioni ti ringrazio nuovamente..davvero! Penso di aver trovato finalmente un forum serio!! Grazie mille..seguirò ogni tuo consiglio!!
Devi accedere o registrarti per scrivere nel forum
4 risposte