为什么编译器在模板函数上产生错误
Why compiler produces an error on template function
为什么以下代码工作正常:
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()
. 有关更多详细信息,请参阅此链接。
相关文章:
- 链接器错误:函数的多个定义
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:函数声明符之后的预期函数体
- C 错误 - 函数不能超载
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 错误:函数调用中有两个参数
- 错误:函数不是“类”的静态数据成员 - C++
- C ,G 编译错误函数
- CMake 解析错误函数缺少结尾")"。而是找到带有文本的未终止字符串")
- C++ 错误 函数 2 的多重定义
- 错误:函数调用中从int到int(*)[4]的转换无效
- C++14 自动扣除错误:函数返回一个数组
- 视觉C++错误:函数必须返回一个值
- 错误:函数声明中的两种或多种数据类型
- 错误:函数未在作用域中声明
- rtw_android.c错误:函数“strnicmp”的隐式声明[-Weror=隐式函数声明]
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]
- 简单程序中的链接器错误:函数的多重定义
- 错误:函数参数太多
- 错误:函数__tmaincrtstartup中引用的未解析的外部符号_main