gpt4 book ai didi

C++ ostream 使用模板隐式删除

转载 作者:太空狗 更新时间:2023-10-29 19:58:35 26 4
gpt4 key购买 nike

我有一个模板化类,我正尝试使用运算符 << 打印出来,但出现错误:

Vertex.h:24:16: error: use of deleted function 'std::basic_ostream<char>::basic_ostream(const std::basic_ostream<char>&)'

其中第24行指的是下面代码中输出运算符的返回:

/In declaration of templated class Vertex
friend std::ostream operator<<(std::ostream& ost, const Vertex<T>& v) {
ost << v.getItem();
return ost;
}

//In main function
Vertex<int>* v1 = new Vertex<int>();
v1->setItem(15);
cout << *v1 << endl;

我怎样才能让这个输出工作?

最佳答案

std::ostream 和 sibling 没有 copy constructorscopy assignment operators [1],当您编写以下可能有错字的代码时

std::ostream operator<<(std::ostream& ost, const Vertex<T>& v) {
// ^ Returning by value
ost << v.getItem();
return ost;
}

您实际上是在尝试返回 ost 的拷贝。要解决此问题,您必须通过引用返回流。

std::ostream& operator<<(std::ostream& ost, const Vertex<T>& v) {
// ^ This

[1] 在C++11中,它们实际上被标记为=deleted

关于C++ ostream 使用模板隐式删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20257836/

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