IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Quel constructeur utiliser? Comment?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par défaut Quel constructeur utiliser? Comment?
    Bonjour

    J'aurais besoin d'un peu d'aide pour un snippet utilisant la classe QuantLib::TimeSeries de la librairie QuantLib.

    Je butte non pas sur une spécificité de cette librairie, mais sur une question plus générale du C++.

    Je ne parviens en fait tout simplement pas à mettre en oeuvre cette classe, décrite ici: http://quantlib.org/reference/class_...me_series.html

    Je pense déclarer correctement mon objet (ligne 17 dans le code en fin de message):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuantLib::TimeSeries<std::vector<QuantLib::Date>, std::vector<double>> series;
    Mais, c'est au moment de le définir que je ne sais pas trop quoi faire (ligne 18 dans le code en fin de message):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    series(dates.begin(), dates.end(), closes.begin());
    Du coup, le compileur, sans pitié me dit:
    call of an object of a class type without appropriate operator() or conversion functions to pointer-to-function type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    #include<ql\quantlib.hpp>
     
    int main()
    {
    	std::vector<QuantLib::Date> dates;
    	std::vector<std::double> quotes;
     
    	dates.push_back(Date(12,Nov, 2012));
    	dates.push_back(Date(13,Nov, 2012));
    	dates.push_back(Date(14,Nov, 2012));
     
    	quotes.push_back(40.05);
    	quotes.push_back(40.84);
    	quotes.push_back(41.03);
     
    	QuantLib::TimeSeries<std::vector<QuantLib::Date>, std::vector<double>> series;
    	series(dates.begin(), dates.end(), closes.begin()); // La ligne qui pose problème
     
    	// Fais quelque chose avec tout çà
     
    	// ... ...
     
     
    	return 0;
    }
    Est-ce que quelqu'un serais bien gentil de me guider ? (et corriger mon vocabulaire que je parle du C++, dans ce qui est écrit au-dessus)

    Merci
    @tallent_e

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Le constructeur a appelé à la déclaration/création de l'objet. Là tu appelles le constructeur par default, puis tu essayes d'appeler un autre constructeur spécifique (en fait tu appelles l'opérateur "()" qui n'existe pas). Le constructeur n'est appelé qu'à... la construction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	QuantLib::TimeSeries<std::vector<QuantLib::Date>, std::vector<double>> series(dates.begin(), dates.end(), closes.begin());

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par défaut
    Merci de ta réponse Joker-eph.

    Je croire saisir ce que tu expliques.

    Maintenant, je me retrouve avec ce message d'erreur:

    Error 5 error C2679: binary '[' : no operator found which takes a right-hand operand of type 'QuantLib::Date' (or there is no acceptable conversion) c:\users\édouard\documents\quantlib-1.2.1\ql\timeseries.hpp
    Je dois mal encore mal utiliser ce constructeur ..

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Es-tu sûr que ça vient de là ? Peux-tu copier/coller le code et indiquer la ligne problématique (le compilateur doit l'indiquer).

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Hum, j'ai lu la description de la classe QuantLib::TimeSeries :

    This class acts as a generic repository for a set of historical data. Any single datum can be accessed through its date, while sets of consecutive data can be accessed through iterators.

    Precondition:
    The Container type must satisfy the requirements set by the C++ standard for associative containers.
    Le template est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template<class T, class Container = std::map<Date, T>>
    Je pense que ce que tu veux c'est un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QuantLib::TimeSeries<double> series(dates.begin(), dates.end(), closes.begin());

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par défaut
    Merci de vos réponses.

    On dirait que je me rapproche de la solution.
    Maintenant le code est compilé, mais je tombe sur un problème de "vector subscript out-of-range".

    Si je comprends en utilisant, avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuantLib::TimeSeries<double> series(dates.begin(), dates.end(), closes.begin());
    je mets en oeuvre le constructeur suivant (décrit à la page: http://quantlib.org/reference/class_...me_series.html)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TimeSeries(DateIterator 	dBegin, DateIterator 	dEnd, ValueIterator 	vBegin)
    Mais en regardant encore, il faut (je pense) que j'utilise le constructeur suivant (puisque je fournis les valeurs pour les cotations 'avant'), soit:
    TimeSeries(const Date & firstDate, ValueIterator begin, ValueIterator end)
    Du coup, j'ai essayé un peu tout, dont:
    QuantLib::TimeSeries<double> series(const QuantLib:ate& dates.begin(), closes.begin(), closes.end());
    (on ne sait jamais, sur un malentendu! ...)

    Donc nous y sommes presque, mais pas encore ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XP] comment savoir quel prog utilise quelle dll?!
    Par noone1 dans le forum Windows XP
    Réponses: 17
    Dernier message: 13/11/2006, 12h03
  2. Comment savoir quel programme utilise toute la RAM ?
    Par Invité dans le forum Administration système
    Réponses: 4
    Dernier message: 26/05/2006, 18h22
  3. [débutant][Listener] quel listener et comment l'utiliser
    Par pingoui dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 12/02/2006, 22h54
  4. Comment faire pour savoir quel processus utilise un DLL
    Par Furius dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 02/11/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo