Parameterfehler bei VS2008



  • Hallo Allerseits, ich habe ein Fehler bei einer Library (ltilib), seitdem ich Visual Studio 2008 anstatt 2005 nutze. Wäre super wenn mir jemand helfen kann.

    Code:
    loadImageList::loadImageList()
    : ioFunctor(), fileNames(0), iter(0), emptyDummy(""), iLoader() { //Fehler

    // create an instance of the parameters with the default values
    parameters defaultParameters;
    // set the default parameters
    setParameters(defaultParameters);

    }

    Fehlermeldung:

    Kompilieren...
    1>ltiLoadImageList.cpp
    1>c:\ltilib\src\io\ltiloadimagelist.cpp(263) : error C2664: 'std::list<_Ty>::_Const_iterator<_Secure_validation>::_Const_iterator(const std::list<_Ty>::_Const_iterator<_Secure_validation> &)': Konvertierung des Parameters 1 von 'int' in 'const std::list<_Ty>::_Const_iterator<_Secure_validation> &' nicht möglich
    1> with
    1> [
    1> _Ty=std::string,
    1> _Secure_validation=true
    1> ]
    1> Ursache: Konvertierung von 'int' in 'const std::list<_Ty>::_Const_iterator<_Secure_validation>' nicht möglich
    1> with
    1> [
    1> _Ty=std::string,
    1> _Secure_validation=true
    1> ]
    1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig

    Vielen Dank im Voraus.
    Gruß speedo



  • Es liegt vermutlich an iter(0) . List-Iteratoren nehmen kein int als Parameter.



  • Achso. Danke Dir. Aber wieso ging das in der Visual Studio 2005er Version?

    Ich habe es jetzt so geändert:

    HEADER-DATEI:
    // internal list of filenames to be loaded
    std::liststd::string fileNames;

    // iterator for fileNames
    std::liststd::string::const_iterator iter;

    CPP-DATEI:
    loadImageList::loadImageList()
    //:ioFunctor(), fileNames(0), iter(0), emptyDummy(""), iLoader(){//ALT
    :ioFunctor(), fileNames(0), iter(fileNames.begin()), emptyDummy(""), iLoader()



  • speedo77 schrieb:

    Achso. Danke Dir. Aber wieso ging das in der Visual Studio 2005er Version?

    Vielleicht weil die Compilerversionen unterschiedlich Standardkonform sind? Ich gehe sogar davon aus das eine der nächsten VS-Versionen viele aufschreien lassen, da der nächste C++ Standard ja vor der Tür steht, und nicht gerade wenige wissenstechnisch noch dem letzten (98) hinterher hinken...

    Davon abgesehen wäre es gut wenn du für Codebeispiele auch die C/C++-Tags auswählst (Direkt unterhalb des Editierbereiches der erste Button unterhalb der Smilies), dann würde man es leichter lesen können.

    Grundsätzlich würde ich Iteratoren aber niemals als Member merken (u.a. weil sie unter Umständen ungültig werden könnten etc.).

    cu André



  • Es ist nichts "nicht konformes" daran iter(0) zu erlauben!


  • Mod

    speedo77 schrieb:

    Achso. Danke Dir. Aber wieso ging das in der Visual Studio 2005er Version?

    In der Regel wird ein solcher Iterator einen privaten Konstruktor haben, der einen Zeiger auf einen Knoten erwartet (irgendwie muss die Liste ja die Ur-Iteratoren begin und end erstellen) und eine 0 würde diesen Konstruktor aufrufen. Dummerweise enthält die Standardbibliothek von VS2005 eine Reihe von Fehlern in Hinblick auf private/public. Nebenbei gesagt ist an der Erlaubnis einen Iterator mit dem Argument 0 zu konstruieren, nichts nicht-konformes. Nichtkonform ist höchstens das Programm, das von dieser Erlaubnis Gebrauch macht.



  • Vielen Dank für die Auskunft. Jetzt wird mir das ganze klar.


Anmelden zum Antworten