klk*_*206 19 c++ ifstream istringstream
我有一个do_something从流中读取无符号字符的函数。
可以从给定文件名的文件创建流。或者它可以通过将给定的字符串视为数据来创建。我想在这两种情况下重用该功能。
下面的代码在第二种情况下给出了一个错误:“错误 C2664: 'do_something: 无法将参数 1 从 'std::basic_istringstream' 转换为 'std::basic_istream'”。
这样做的正确方法是什么?
static void do_something(std::basic_istream<unsigned char>& in)
{
in.get();
}
static void string_read(unsigned char* in)
{
std::basic_ifstream<unsigned char> file(std::string("filename"));
do_something(file);
std::basic_istringstream<unsigned char> str(std::basic_string<unsigned char>(in));
do_something(str);
}
Run Code Online (Sandbox Code Playgroud)
0x4*_*2D2 22
您的代码正在经历一种称为令人烦恼的解析。线路:
std::basic_istringstream<unsigned char> str(std::basic_string<unsigned char>(in));
Run Code Online (Sandbox Code Playgroud)
被解释为函数声明。str这是一个函数,它返回 astd::istringstream并将std::string名为的类型变量作为其参数in。因此,当您将其传递给函数时,会出现明显的类型不匹配。
要将其更改为变量声明,您可以使用花括号:
std::basic_istringstream<unsigned char> str{std::basic_string<unsigned char>(in)};
Run Code Online (Sandbox Code Playgroud)