【问题标题】:error C2679: binary '<<': no operator found which takes a right-hand operand of type 'std::string_view' (or there is no acceptable conversion)错误 C2679:二进制“<<”:未找到采用“std::string_view”类型右侧操作数的运算符(或没有可接受的转换)
【发布时间】:2020-07-03 21:36:00
【问题描述】:
#include <iostream>
#include <string>

void Log(std::string_view message)
{
    std::cout << message << std::endl;
}

int main()
{
    const char* text = "Test";
    Log(text);
    std::cin.get();
}

我收到了这个错误,并且#include &lt;string&gt; 包含在开头。有什么想法吗?

【问题讨论】:

  • 无法复制。似乎work 你使用的是什么编译器和标准版本?另外,#include&lt;string_view&gt;.
  • @cigien 我正在使用 ISO C++17 标准 (/std:c++17)。顺便说一句,我添加了#include&lt;string_view&gt;,现在它可以工作了。非常感谢!但我仍然很好奇为什么它不起作用。在 Cherno 的 youtube 视频中,他的代码在没有添加 #include&lt;string_view&gt; 的情况下运行。你可以从他的视频中查看。 link
  • 如果您不包含必要的标头,则不能保证有效。实际上,编译器将包含其他头文件,因此如果包含所需的头文件,它似乎可以工作。请注意,我在评论中所做的链接没有&lt;string_view&gt;,所以是错误的,但它可以编译。
  • 我明白。感谢您的清晰解释:) @cigien
  • 重复是另一种情况,但答案是一样的

标签: c++ windows visual-studio-2017 c++17


【解决方案1】:

和其他已经提到的一样 - std::string_view 定义在标准标题“string_view”中,必须包含 - 否则未定义 string_view。

因为你包含了一些像“string”和“iostream”这样的头文件,它们与 std::string_view 有一些联系,很明显它们至少做了一些 forward_declarations。

在某些实现中,string_view 可能已经包含在其他系统头文件中。 例如 std::string_view 可以在标题“string”中实现/定义,而标题“string_view”可以只包含“string”。

但总的来说,这是库实现的一个实现细节。为了能够使用 std::string_view,需要包含该标头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多