std::string(argv[1]) als Parameter einer Funktion funktioniert nicht!



  • Image(const std::string&); // Konstruktor
    
      .
      .
      .
    
      Magick::Image curImage(std::string(argv[1]));  // funktioniert nicht!
      Magick::Image curImage((std::string)argv[1]);  // geht   
      std::string s = std::string(argv[2]);
      Magick::Image curImage(s);                     // geht auch
    

    Hallo Forum,
    warum funktioniert der erste Aufruf nicht? (Liefert folgende Fehlermeldung beim Aufruf einer Methode dieser Klasse:
    error: request for member `monochrome' in `curImage', which is of non-class type `Magick::Image ()(std::string*)')

    Vielen Dank im voraus für die Hilfe,
    Stefan



  • die erste Variante wird vom Compiler nicht als Variablen-Definition mit Ctor-Aufruf interpretiert, sondern als Funktions-Deklaration.

    Übrigens ist der Ctor von String implizit, also sollte eigentlich auch folgendes gehen:

    Magick::Image curImage(argv[1]);
    


  • Gemeine Sache:
    Der Compiler interpretiert die Zeile ohne überflüssige Klammern wie folgt:

    Magick::Image curImage(std::string argv[1]);
    

    Nach dem Gesetz, dass alles, was wie eine Deklaration aussieht, auch eine Deklaration ist, deklariert diese Zeile eine Funktion namens curImage, die ein Magick::Image zurückgibt und ein Array von std::strings als Parameter verlangt.


Anmelden zum Antworten