1

エラーはtype& AssocArray<key, value>::operator[]( key& k )、AssocArray の外側に位置するものから発生します。エラーメッセージが表示される理由がわかりません:

error C2143: syntax error : missing ';' before '&'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

編集:

私はこれらの次のステートメントを試しました:

typedef typename std::pair<key, value> type;

typedef std::pair<key, value> type; 

using type = std::pair<key, value>;

それらも機能しませんでした。

template <typename key, typename value>
class AssocArray
{
public:
    typedef typename std::pair<typename key, typename value> type;

    bool addItem(key& k, value& v);

    bool isItem(key& k);

    type& operator[] (key& k);
protected:
private:
    std::vector<type> vecData;
};

template <typename key, typename value>
type& AssocArray<key, value>::operator[]( key& k )
{
    auto iter = std::find_if(vecData.begin(), vecData.end(),
        [&](type& param)
    {
        return param.first == key;
    }
    );
    if(vecData.end() != iter)
        return *iter;

    value v;
    vecData.push_back(std::make_pair(k, v));
    return *vecData.rbegin();
}

template <typename key, typename value>
bool AssocArray<key, value>::isItem( key& k )
{
    auto iter = std::find_if(vecData.begin(), vecData.end(),
        [&](type& param)
    {
        return param.first == key;
    }
    );

    return vecData.end() != iter;
}

template <typename key, typename value>
bool AssocArray<key, value>::addItem( key& k, value& v )
{
    if(isItem(k)) return false;

    vecData.push_back(std::make_pair(k, v));
    return true;
}
4

1 に答える 1

1

nm が指摘したように、次のようなものが必要です。

template <typename key, typename value>
AssocArray<key,value>::type& AssocArray<key, value>::operator[]( key& k )
{
    ...

または C++11 の場合:

template <typename key, typename value>
auto AssocArray<key, value>::operator[]( key& k ) -> type &
{
    ...

はクラスのメンバーであるためtype、クラスを修飾するか、クラスのメンバーを定義していることを指定した後まで待機することによって、クラスのコンテキスト内に入るまで、名前はわかりません。

于 2013-07-23T04:07:15.913 に答える