2010-11-27 8 views
0

Je travaille sur le code C++ de "Financial Instrument Pricing Using C++" - un livre sur la tarification des options utilisant C++. Le code suivant est un petit extrait dépouillé de nombreux détails qui tente essentiellement de définir une classe SimplePropertySet destinée à contenir un nom et une liste.Fonction d'itération de codage pour la classe STL

#include <iostream> 
#include <list> 
using namespace::std; 

template <class N, class V> class SimplePropertySet 
{ 
    private: 
    N name;  // The name of the set 
    list<V> sl; 

    public: 
    typedef typename list<V>::iterator iterator; 
    typedef typename list<V>::const_iterator const_iterator; 

    SimplePropertySet();  // Default constructor 
    virtual ~SimplePropertySet(); // Destructor 

    iterator Begin();   // Return iterator at begin of composite 
    const_iterator Begin() const;// Return const iterator at begin of composite 
}; 
template <class N, class V> 
SimplePropertySet<N,V>::SimplePropertySet() 
{ //Default Constructor 
} 

template <class N, class V> 
SimplePropertySet<N,V>::~SimplePropertySet() 
{ // Destructor 
} 
// Iterator functions 
template <class N, class V> 
SimplePropertySet<N,V>::iterator SimplePropertySet<N,V>::Begin()//<--this line gives error 
{ // Return iterator at begin of composite 
    return sl.begin(); 
} 

int main(){ 
    return(0);//Just a dummy line to see if the code would compile 
} 

En compilant ce code sur VS2008, j'obtenir les erreurs suivantes:

warning C4346: 'SimplePropertySet::iterator' : dependent name is not a type 
    prefix with 'typename' to indicate a type 
error C2143: syntax error : missing ';' before 'SimplePropertySet::Begin' 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

est là que je suis quelque chose de stupide ou de base que se tromper ou d'oublier ici? Est-ce une erreur de syntaxe? Je suis incapable de mettre le doigt dessus. Le livre à partir duquel cet extrait de code est pris indique que leur code a été compilé sur Visual Studio 6. S'agit-il d'un problème lié à la version?

Merci.

Répondre

2

Comme indiqué par le compilateur, vous devez remplacer:

template <class N, class V> 
SimplePropertySet<N,V>::iterator SimplePropertySet<N,V>::Begin() 

avec:

template <class N, class V> 
typename SimplePropertySet<N,V>::iterator SimplePropertySet<N,V>::Begin() 

Voir this link pour une explication sur les noms dépendants.

+0

Oh ... c'est si simple ... merci de me pointer dans la bonne direction, ma stupide question à part. Votre suggestion a bien fonctionné. THX. – Tryer

Questions connexes