使用 std::copy 时出错
Posted
技术标签:
【中文标题】使用 std::copy 时出错【英文标题】:error when using std::copy 【发布时间】:2012-08-02 04:37:00 【问题描述】:大家好,我为 .obj 模型解析器编写的一些代码遇到了问题。 这是导致问题的代码:
std::istringstream iss(line.substr(1));
std::copy(
std::istream_iterator<float>(iss),
std::istream_iterator<float>(),
std::back_inserter<std::vector<float>>(model.chunks.back().vectices)
);
它基本上将一个字符串作为参数传递,如下所示:
v -5.000000 -1.000000 1.000000
然后从中获取子字符串,因此只剩下以下内容:
-5.000000 -1.000000 1.000000
最后我使用 std::copy 并从字符串中获取每组数字:
顶点[0] = -5.000000 顶点[1] = -1.000000 顶点[2] = 1.000000
无论如何,这里的主要问题是我从这行代码中得到一个错误:
std::back_inserter<std::vector<float>>(model.chunks.back().vectices));
它说“预期的令牌';' got float" 我的代码仍然可以完美地编译和运行。
虽然如果我用 std::string's 替换该代码中的浮点数,我就不会再收到错误了。
std::copy(
std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter<std::vector<std::string>>(model.chunks.back().vectices)
);
我正在使用 Qt Creator,所以这可能只是一个 IDE 错误吗?任何帮助将不胜感激!
【问题讨论】:
std::back_inserter 可以从参数推断类型。 为什么不直接写std::back_inserter(model.chunks.back().vectices)
,让编译器推导出类型参数?
嗯.. 没想到。它还需要更少的代码。感谢您的提示!
【参考方案1】:
可能是您的 IDE 不理解模板规范中的 >>
。旧版本的 C++ 标准要求您在每个 >
之间放置一个空格,就像在 > >
中一样,否则它可能会与右移位运算符 >>
混淆。所以:
std::back_inserter<std::vector<float> >(model.chunks.back().vectices));
【讨论】:
理论不错,但他说它适用于最后一段代码中的std::string
,其中包括相同的>>
序列,没有空格。
啊,真的。很好奇。但它肯定是特定于 IDE 的东西,因为否则带有语法错误的代码不能“完美地编译和运行”。
刚刚在>>之间添加了一个空格,错误就消失了!一定是IDE。谢谢你们,谢谢你们这么快回复!以上是关于使用 std::copy 时出错的主要内容,如果未能解决你的问题,请参考以下文章
空范围的 std::copy() 或 std::move() 是不是需要有效目的地?