Warnung: veraltete Konvertierung



  • Hallo,

    um von einem Fenster ein Screenshot zu machen, habe ich aus dem Internet mir diesen Code zusammengeklaut.

    void screenshot (char filename[160],int x, int y){
    	long imageSize = x * y * 3;
    	unsigned char *data = new unsigned char[imageSize];
    	glReadPixels(0,0,x,y, GL_BGR,GL_UNSIGNED_BYTE,data);
    	int xa= x % 256;
    	int xb= (x-xa)/256;
    	int ya= y % 256;
    	int yb= (y-ya)/256;
    	unsigned char header[18]={0,0,2,0,0,0,0,0,0,0,0,0,(char)xa,(char)xb,(char)ya,(char)yb,24,0};
    
    	std::fstream File(filename, std::ios::out | std::ios::binary);
    	File.write (reinterpret_cast<char *>(header), sizeof (char)*18);
    	File.write (reinterpret_cast<char *>(data), sizeof (char)*imageSize);
    	File.close();
    
    	delete[] data;
    	data=NULL;
    }
    

    Nun wird mir für diese Funktion beim Kompilieren

    Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*«
    

    ausgegeben. Wie sollte die Konvertierung denn richtig sein ?



  • Die Fehlermeldung kommt nicht vom gezeigten Code.
    Was sie bedeutet: In C konnte man String Literale ("Hallo Welt"), einem char* zuweisen. Aber da sie Literale sind, konnte/durfte man sie nicht verändern. C++ drückt das stärker aus, indem es die Zuweisung nach char* verbietet, man kann sie nur const char* zuweisen und sie somit nicht "versehentlich" verändern. Die Zuweisung nach char* ist diese veraltete Konvertierung.
    Du rufst vermutlich screenshot mit einem Stringliteral auf, daher kommt die Warnung. Ändere den filename-Parameter zu const char* filename, dann funktioniert es.
    BTW: Zeile 17 zeugt davon, dass der Autor von dem Code, vermutlich nicht so viel Ahnung hat, sei vorsichtig mit blindem zusammenkopieren!



  • Dankeschön für die Antwort. Wieso ist denn die Zeile so schlimm?



  • Garnichts. Sie ist nür völlig sinnfrei.



  • Und das soll was für ein Dateiformat sein?



  • Das ist sowas wie einen Ausdruck unmittelbar vorm Wegwerfen zu lochen. Kann man als Indiz dafür durchgehen lassen, dass dem Codeschreiber nicht ganz klar ist, was er da tut.



  • asfdlol schrieb:

    Und das soll was für ein Dateiformat sein?

    tga

    asfdlol schrieb:

    dass dem Codeschreiber nicht ganz klar ist, was er da tut.

    aber es funktioniert, ganz ohne zusatzbibliotheken



  • Namal schrieb:

    asfdlol schrieb:

    dass dem Codeschreiber nicht ganz klar ist, was er da tut.

    aber es funktioniert, ganz ohne zusatzbibliotheken

    Wo habe ich das geschrieben?

    Und ausserdem ist "es funktioniert" kein Argument zur Untermalung der programmiertechnischen Fähigkeiten von irgendjemandem. Dass der Code schlecht ist steht hier hoffentlich nicht zur Diskussion (nicht exceptionsicher da besitzender Zeiger, char-Array als Dateiname, fstream mit out -Flag, .close() , Zeile 17, Subtraktion vor Division (wird ohnehin abgerundet), und so weiter...).


Log in to reply