STL类的编码迭代器函数

STL类的编码迭代器函数

我正在研究“使用C ++进行金融工具定价”中的一些C ++代码-有关使用C ++进行期权定价的书。下面的代码是一个剥夺了许多细节的小片段,基本上是试图定义一个旨在包含名称和列表的SimplePropertySet类。

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


在VS2008上编译此代码时,出现以下错误:

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


在这里我有什么愚蠢或基本的错误或遗忘之处吗?这是语法错误吗?我无法将手指放在上面。引用此代码片段的那本书说,他们的代码是在Visual Studio 6上编译的。这是否是与版本有关的问题?

谢谢。

最佳答案

如编译器所示,您必须替换:

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


与:

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


有关相关名称的说明,请参见this link

关于c++ - STL类的编码迭代器函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4293343/

10-12 15:25