Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用模板重载流插入操作符?_C++_Templates_Vector_Operator Overloading - Fatal编程技术网

C++ 如何使用模板重载流插入操作符?

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, ', '));

我试图重载流插入操作符,以便将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, ', '));
    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;