【问题标题】:binary operator "<<" can't be applied to the expressions of type "wostream" and "string"二元运算符“<<”不能应用于“wostream”和“string”类型的表达式
【发布时间】:2017-07-23 19:08:58
【问题描述】:

我将此消息打印为错误

二元运算符“

由 CLion 的检查员(我的 IDE),只要我的代码看起来像这样。

 stringstream ss;
            ss << "Foo baré féé bar"
               << someObj->aStdStringProperty << endl;

(故意像“é”这样的口音)

它编译和链接都很好,实际上是字符串成员部分导致它抛出错误。

仅供参考,我不是写这篇文章的人,这是我正在从事的一个项目。

我不习惯 C++ 中的字符串、wostreams、w_char 和所有这些东西,所以我有点困惑是我的 IDE 过于苛刻还是我误解了我的课程/阅读材料。

提前致谢!

【问题讨论】:

  • 我认为在使用宽字符流时需要使用std::wstring。我自己对它们并不熟悉,但是在 ideone.com 上进行的快速测试表明,当我将 std::string 更改为 std::wstring 时它起作用了。
  • 如果它编译和链接正常,你的IDE是错误的。事实上,您可以看到您没有使用宽 stringstream。 (或者,您的问题与真实代码不符,这种情况我们没有帮助您的希望)。
  • 我认为问题在于anStdStringPropertystd::string,但他的同事使用的是宽字符流。在提交者的代码中,他使用的是std::stringstream,所以当然可以编译得很好。
  • 我今天也注意到了这个问题(而且我没有使用任何重音字符或任何东西——普通的 sub-127 ASCII)。 CLion 认为我有一个错误,但我的编译器工作正常,我的程序运行良好。
  • 如果ssstd::stringstream 并且myLiteralconst char *,CLion 似乎认为表达式ss &lt;&lt; myLiteral 的输出类型是ostream&lt;wchar_t&gt;,而不是ostream&lt;char&gt; (正如我所料)。知道这一点就解释了为什么 CLion 认为存在错误。有什么理由认为 CLion 关于ostream&lt;wchar_t&gt; 是正确的吗?

标签: c++ string stream clion


【解决方案1】:

确实是最近修复的CLion的一个bug:)

Bug Report Page

Clion CLion 2016.3.4

谢谢你的想法:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多