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

Why compiler produces an error on template function

本文关键字:错误 函数 编译器 为什么      更新时间:2023-10-16

为什么以下代码工作正常:

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

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

'std::set*' 不是类、结构或联合类型

这是怎么回事?

如果更改此设置:

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() . 有关更多详细信息,请参阅此链接。