gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:19:17 26 4
gpt4 key购买 nike

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

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< int >*' is not a class, struct, or union type

这里有什么问题吗?

最佳答案

如果你改变这个:

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

为此:

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

那么 body 需要看起来像这样:

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了解更多详情。

关于c++ - 为什么编译器会在模板函数上产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14509283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com