0

ベクトルと特定の型の要素を取り、ベクトル内の要素の位置を返す関数テンプレートがあります。これは、この関数テンプレートのコードです:

template<class T>
int findElement(const vector<T> &vec, const T &ele)
{
    for(size_t i = 0; i < vec.size(); i++)
    {
        if(ele == vec[i])
            return i;
    }
    return -1;
}

関数呼び出しは次のとおりです。

findElement<double>(intVec, ele);

しかし、関数を呼び出すと、次のエラーが発生します。

error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'const std::vector<_Ty,_Ax> &'

constそして、このエラーは、関数テンプレート定義のベクトルの for を削除しても同じです:

error C2664: 'findElement' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::vector<_Ty,_Ax> &'

ただし、関数呼び出しを次のように行うと、

findElement(intVec, ele)

エラーは発生しません。

この動作の理由は何ですか?

4

1 に答える 1

3

コンパイラが に変換できないようvector<double>ですvector<int>。論理的にintVecは、ベクトルは int ですよね。そして、あなたvectorは double が欲しいと言うコンパイラーを言います。次のがないvector<T>ためvector<U>、 に変換できません。これは素晴らしいことです。vectorconversion constructor

于 2013-04-24T05:37:55.153 に答える