C++ 如何使用模板重载流插入操作符?
我试图重载流插入操作符,以便将std::vector打印到std::cout,但语法有问题 这就是我所尝试的:C++ 如何使用模板重载流插入操作符?,c++,templates,vector,operator-overloading,C++,Templates,Vector,Operator Overloading,我试图重载流插入操作符,以便将std::vector打印到std::cout,但语法有问题 这就是我所尝试的: template<typename T> std::ostream & operator<<(std::ostream &os, std::vector<T> &v) { std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ', '));
template<typename T> std::ostream & operator<<(std::ostream &os, std::vector<T> &v)
{
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(os, ', '));
return os;
};
template std::ostream&operator代码几乎没有问题,但是:
- 分隔符
,'
不正确:请使用,“
- 您的函数可以(也应该)对v进行常量引用:
const std::vector&v
- 有一个不必要的
代码>在函数关闭大括号之后:)
对于记录,,“
是一种类型int
,因此编译器抱怨std::ostream\u迭代器
构造函数的重载与参数列表”(std::ostream,int)
不匹配。。。除了明显的<代码>,“而不是<代码>”,我在C++模板语法知识中是如此的不安全,以至于我认为我犯了一个大错误…但这是微不足道的。非常感谢你。新的眼睛看到更好。只是为了添加ICICRIME的解释,单引号用来分隔C++C++中的字符而不是字符串。我将我的源文件保存在VisualStudio中的UTF-8中,所以字符和字符串文字总是单个字节。C++的标准字符。“包含多个c字符的普通字符文字是多字符文字。多字符文字具有int类型和实现定义的值”。问题在于使用单引号,而不是源代码格式。
std::vector<float> v(3, 1.f);
std::cout << v;