0

私は、「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 でコンパイルされたと書かれています。これはバージョン関連の問題ですか?

ありがとう。

4

1 に答える 1

2

コンパイラによって示されるように、次のものを置き換える必要があります。

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

従属名の説明については、このリンクを参照してください。

于 2010-11-27T19:10:37.017 に答える