【问题标题】:Cout << Smart Pointer?Cout <<智能指针?
【发布时间】:2021-11-28 16:27:10
【问题描述】:

我一直在关注 CodeBeauty 的 C++ 指针教程,在 video regarding smart pointers 上遇到了问题。

unique_ptr<int>unPtr1=make_unique<int>(25);
cout << unPtr1;

我确实包含了&lt;memory&gt;,并且我的语法与显示的完全相同,但是每当我尝试运行程序时都会收到此错误消息(完整错误是here):

pointers.cpp: In function 'int main()':
pointers.cpp:194:22: error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'std::unique_ptr<int>')
                 cout << unPtr1;
                 ~~~~~^~~~~~~~~

这可能是编译器问题吗?我在 VSCode + mingw-64 工作。

【问题讨论】:

  • 您要打印什么:智能指针存储的地址或该地址的值?
  • cout &lt;&lt; unPtr1; 可能是一个错字。应为cout &lt;&lt; unPtr1.get();cout &lt;&lt; *unPtr1;,具体取决于应打印的地址或值。
  • @GonenI 我很惊讶您没有收到错误消息。据我所知,标准库中没有operator&lt;&lt; 用于unique_ptr。您使用的是什么实现方式?
  • 不要使用 cout。 cout 是一个失败的实验。

标签: c++ pointers unique cout


【解决方案1】:

错误消息告诉您,您正在尝试使用operator&lt;&lt;,它在左侧采用std::ostream,在右侧采用std::unique_ptr,但编译器找不到这样的运算符。

这样的operator&lt;&lt;added in C++20

视频中的演示者正在使用 Visual Studio。 C++20 支持是added in Visual Studio 2019 v16.9 and finalized in v16.11。但即使是 Visual Studio 2017 显然也为 std::unique_ptr 定义了一个 operator&lt;&lt;,至少对于 C++14 和 C++17。假设她正在使用现代版本的 Visual Studio 进行编译并不是一件容易的事,这可以解释为什么该示例对她来说编译得很好。

因此,请确保您使用的是支持 C++20 标准的 mingw-64 版本,并且您指示它在编译期间实际使用该标准。

否则,您只需将cout &lt;&lt; unPtr1; 替换为cout &lt;&lt; unPtr1.get(); 即可获得相同的结果。

【讨论】:

  • @GonenI 谢谢,我将信息添加到我的答案中。
猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2011-07-08
相关资源
最近更新 更多