alte Konvention bei char* und char[]



  • Hallo.
    Ich verstehe meinen Fehler nicht und google hilft mir nicht weiter. Unter euch ist bestimmt jemand der den Kopf schüttelt wenn er das ließt und mir promt eine Antwort darauf geben kann: 😉
    Ich habe (hier das Wesentliche dargestellt) folgendes in meiner cpp Datei stehen (Fedora Eclipse Platform 3.4.1):

    //...
    char SERIAL_PORT_DEVICE [] = "/dev/ttyUSB0" ;
    //...
    char dateiname [] = "fw_file.bin";
    //...
    //...
    //...
    
    int main(int argc, char* argv[]) {
    	int retval = 1;
    	unsigned long long timer = 0;
    
            if (argc < 2) {
    		std::cerr << "No file selected!\n" << std::endl;
    		std::cerr << "INFO:  Usage: " << argv[0] << " <filename>" << std::endl;
    		std::cerr << "-----\n\n";
    		return 1;
    	}
    
    	if (argv[1] )
    	dateiname = argv[1]; //hier Fehler!!!
    
    	if (argc == 3) {
    		SERIAL_PORT_DEVICE = argv[2]; //hier Fehler!!!
    		cout << "Using Port: " << SERIAL_PORT_DEVICE << std::endl;
    	} else {
    		std::cout << "Using standard port: " << SERIAL_PORT_DEVICE << std::endl;
    	}
    	std::cout << "command: ";
    	for (int i = 0; i < argc; i++) {
    		cout << argv[i] << " ";
    	}
    	cout << endl;
    	cout << endl;
    	programm_datei.open(dateiname, ios::in | ios::binary);
    
    	if (programm_datei) {
    
            //...
    
            } else {
    		cerr << "File or Directory " << dateiname << " not exists!"  << endl;
    		retval = -1;
    	}
    	return retval;
    }
    

    Der Compiler g++ (GCC) 4.3.2 20081105 (Red Hat 4.3.2-7) meldet foglende Fehler:

    In function »int main(int, char**)«:
    458: Fehler: unverträgliche Typen in Zuweisung von »char*« an »char [8]«
    461: Fehler: unverträgliche Typen in Zuweisung von »char*« an »char [13]«

    Was er mir sagen will kann ich mir so in etwa vorstellen, nur beheben kann ich es nicht. Für Hilfe bin ich dankbar.



  • Arrays kann man nicht einander zuweisen. Entweder strcpy() nutzen (C-String kopieren) oder std::string, den kann man mit op= zuweisen.


  • Administrator

    Man kann keine C Arrays gegenseitig zuweisen, dies ist nicht erlaubt. Daher wird argv[x] implizit in einen Zeiger verwandelt und das ist der Fehler, den du dann siehst, da man auch keinen Zeiger an ein char Array zuweisen kann 😉

    Definiere den Typ von SERIAL_PORT_DEVICE und dateiname entweder um zu char const* oder std::string .
    http://www.cplusplus.com/reference/string/

    Grüssli



  • Ich danke euch.
    Meine C++ Kenntnisse sind schon ein paar Tage älter und ich tue mich gerade schwer da wieder rein zu kommen.
    Kann mir jemand verraten, wo ich Informationen (qualitativ etwas handfester als nur bei google irgendwas eingetippt) über den neuen Compiler bekomme? Da hat sich ja doch einiges getan (mehr C als C++ oder so). Dieser Fehler ist nämlich dabei entstanden ein altes Programm einem neuen Compiler zum Fraß vorzuwerfen.

    Danke noch einmal! 👍


Anmelden zum Antworten