C++ 没有匹配的构造函数用于初始化';stringstream';

C++ 没有匹配的构造函数用于初始化';stringstream';,c++,C++,它给了我: 没有用于初始化“stringstream”(也称为“basic_stringstream”)的匹配构造函数 为什么我需要一个构造函数呢?因为传递值需要一个复制构造函数,并且流对象被特别设置为不可复制构造。您可以通过引用传递流或移动流。因为通过值传递需要一个复制构造函数,并且流对象被专门设置为不可复制构造函数。您可以通过引用传递流或移动流。您不能通过值传递流,它们不包括复制构造函数。您应该通过引用传递它们: static void copy(byte_array src, int en

它给了我:

没有用于初始化“stringstream”(也称为“basic_stringstream”)的匹配构造函数


为什么我需要一个构造函数呢?

因为传递值需要一个复制构造函数,并且流对象被特别设置为不可复制构造。您可以通过引用传递流或移动流。

因为通过值传递需要一个复制构造函数,并且流对象被专门设置为不可复制构造函数。您可以通过引用传递流或移动流。

您不能通过值传递流,它们不包括复制构造函数。您应该通过引用传递它们:

static void copy(byte_array src, int end, stringstream& sb) {
    copy(src, 0, end, sb);
}
[编辑]

有关如何将流传递给函数以进行修改的示例:

#包括
#包括
#包括
#包括
#包括
//参照
静态void copy1(const char*src,int end,std::stringstream&sb){
std::copy(src,src+end,std::ostream_迭代器(sb));
}
//用指针
静态void copy2(const char*src,int end,std::stringstream*sb){
std::copy(src,src+end,std::ostream_迭代器(*sb));
}
//按值,但使用移动语义
静态std::stringstream copy3(const char*src,int end,std::stringstream sb){
std::copy(src,src+end,std::ostream_迭代器(sb));
归还某人;
}
//实际上也是通过引用,但使用std::ref
模板
静态void copy4(常量字符*src,int-end,S-sb){
std::copy(src,src+end,std::ostream_迭代器(sb));
}
int main(int argc,char*argv[])
{
char arr[3]={'a','b','c'};
{
std::strings;
副本1(arr,3,s);

std::cout不能按值传递流,它们不包括复制构造函数。应通过引用传递它们:

static void copy(byte_array src, int end, stringstream& sb) {
    copy(src, 0, end, sb);
}
[编辑]

有关如何将流传递给函数以进行修改的示例:

#包括
#包括
#包括
#包括
#包括
//参照
静态void copy1(const char*src,int end,std::stringstream&sb){
std::copy(src,src+end,std::ostream_迭代器(sb));
}
//用指针
静态void copy2(const char*src,int end,std::stringstream*sb){
std::copy(src,src+end,std::ostream_迭代器(*sb));
}
//按值,但使用移动语义
静态std::stringstream copy3(const char*src,int end,std::stringstream sb){
std::copy(src,src+end,std::ostream_迭代器(sb));
归还某人;
}
//实际上也是通过引用,但使用std::ref
模板
静态void copy4(常量字符*src,int-end,S-sb){
std::copy(src,src+end,std::ostream_迭代器(sb));
}
int main(int argc,char*argv[])
{
char arr[3]={'a','b','c'};
{
std::strings;
副本1(arr,3,s);

STD::所以,除非我通过引用,否则我不能把java流传递给一个方法,因为StrugScript是不可复制的,对吗?在你的情况下,如果你想要一个修改流的函数,C++就有意义了。DUH!值传递不会做任何事情。我必须记住C++,不同于Java,总是通过。按值传递,而不是按引用传递。因此,每当我将对象传递给想要修改该对象的方法时,我都需要按引用传递,否则它就一文不值。还有一种方法,我还包括了一些示例hanks!我的理解是:当你按值传递
std::vector
时,你实际上是在制作对象的浅拷贝,因此,当您在方法内部修改向量时,外部世界会看到它,因为向量的内容在堆中?或者我在这里搞错了,我还必须通过引用修改方法来传递
std::vector
?我怎么知道?文档?所以除非通过引用传递,否则我不能将stringstream传递给方法是的,在你的情况下,是的,在你的情况下,如果你想要一个修改流的函数,那么通过引用传递它是有意义的。DUH!值传递不会做任何事情。我必须记住C++,不同于java,总是通过值,而不是引用。所以每当我把一个对象传递给一个想要去的方法。修改那个对象,我需要通过引用传递,否则它就一文不值了。还有另外一种方法,我已经包括了一些示例hanks!我的理解是:当你通过值传递一个
std::vector
时,你实际上是在制作对象的浅层副本,所以当你在方法内部修改向量时,外部世界会看到它,因为向量的内容在堆中?或者我这里搞错了,我还必须通过引用修改方法传递
std::vector
?我怎么知道?文档?