gpt4 book ai didi

c++ - accumulate 和 ostringstream 编译错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:52:51 26 4
gpt4 key购买 nike

我在标记的行中收到以下编译错误:

error: conversion from ‘std::basic_ostream<char,
std::char_traits<char> >
’ to non-scalar type ‘std::ostringstream’ requested

你能帮我改正我的例子吗?

#include <numeric>
#include <sstream>

using namespace std;

ostringstream ConvertLettersToNumbers(ostringstream acc, char input)
{
if(isdigit(input))
{
return acc << input; // error
}
else
{
return acc << static_cast<int>(input); // error
}
};

int main(int argc, char **argv)
{
string stringToCovert = "ABC";

ostringstream out = accumulate(stringToCovert.begin(), stringToCovert.end(),
string(), ConvertLettersToNumbers);

string convertedString = out.str(); // expected "656667"

return 0;
}

编辑:我的第一个版本使用字符串,但速度很慢:

   string ConvertLettersToNumbers(string acc, char input)
{
if(isdigit(input))
{
return acc + input;
}
else
{
stringstream sstr;
sstr << static_cast<int>(input);
return acc + sstr.str();
}
};

最佳答案

acc << input 的结果是std::ostream& .您丢失了原始流的具体类型。你可以用类型转换来解决这个问题:

return static_cast<std::ostringstream&>(acc << input);

如果这种情况经常出现,您可以想象一个可变模板化的助手:

return covariant_stream(acc, input, input2, "separator", input3);

由于您的代码还有许多其他错误,这里有一个固定的框架:

#include <ostream>
#include <sstream>

#define using abusing

std::ostringstream & ConvertLettersToNumbers(std::ostringstream & acc, char input)
{
return static_cast<std::ostringstream&>(acc << input);
}

关于c++ - accumulate 和 ostringstream 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com