为什么编译器会在模板函数上产生错误

时间:2013-01-24 19:35:11

标签: c++ stl vector set containers

为什么以下代码可以正常运行:

template <typename Set, typename Vector> void copySetToVector2(Set &s, Vector &v)
{
    copy(s.begin(), s.end(), inserter(v, v.begin()));
}

int main()
{
    set<int> s1;
    s1.insert(1);
    s1.insert(2);
    s1.insert(3);

    vector<int> v1;

    copySetToVector2(s1, v1);
    return 0;
}

但是如果我在模板函数中将变量更改为指针,则编译器会产生错误:

  

&#39;的std ::设置&LT; int&gt; *&#39;不是类,结构或联合类型

这里有什么问题?

1 个答案:

答案 0 :(得分:4)

如果你改变了这个:

template <typename Set, typename Vector> void copySetToVector2(Set &s, Vector &v)

到此:

template <typename Set, typename Vector> void copySetToVector2(Set *s, Vector *v)
然后身体需要看起来像这样:

template <typename Set, typename Vector> void copySetToVector2(Set *s, Vector *v)
{
    copy(s->begin(), s->end(), inserter(*v, v->begin()));
}

点符号s.begin()不适用于指针。您需要切换到s->begin()。有关详细信息,请参阅This link