Question

Je travaille dans un certain code C ++ de « Tarification des instruments financiers en C ++ » - un livre sur les prix de l'option en C ++. code suivant est un petit extrait dépouillé de nombreux détails qui en fait des tentatives pour définir une classe SimplePropertySet qui est destiné à contenir un nom et la liste.

#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
}

Sur la compilation de 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-il que je suis quelque chose de stupide ou de base que se tromper ou d'oublier ici? Est-ce une erreur de syntaxe? Je ne peux pas mettre mon doigt dessus. Le livre dont cet extrait de code est dit pris leur code a été compilé sur Visual Studio 6. Est-ce une question connexe version?

Merci.

Était-ce utile?

La solution

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()

ce lien pour un explication sur les noms dépendants.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top