std::basic_ostream在c++中是不可访问的

std::basic_ostream is inaccessible in C++

本文关键字:访问 c++ basic ostream std      更新时间:2023-10-16

我得到以下错误,我不确定问题是什么

1智能感知:"std::basic_ostream<_Traits>::basic_ostream(const std::basic_ostream<_Elem, _Traits>::_Myt &_Right) [with _Elem=char, _Traits=std::char_traits]在"C:Program Files (x86)Microsoft Visual Studio"的第82行11.0VCincludeostream")无法访问

Book.cpp

ostream operator<< (ostream& out, const Book & b){
    out << "Title: " << b.my_Title << endl;
    out << "Author: " << b.my_Author << endl;
    out << "Number of time checkout out: " << b.my_NumberOfTimesCheckedOut;
    return(out);
}

我知道return(out);的问题了

Book.h

#ifndef BOOK_H
#define BOOK_H
#include <string>
using namespace std;
namespace CS20A
{
    class Book {
    public:
        Book();
        Book( string author, string title );
        string getTitle() const;
        string getAuthor() const;
        int getNumberOfTimesCheckedOut() const;
        void increaseNumberOfTimesCheckedOut( int amount=1 );
        friend ostream operator<< ( ostream& out, const Book & b );
    private:
        string my_Author;
        string my_Title;
        int my_NumberOfTimesCheckedOut;
    };
};
#endif

我甚至不明白错误告诉我什么

我怀疑你使用的是一个古老的编译器,它实现了禁止复制std::ostream,这是不可复制的,通过将其复制构造函数设为私有;因此出现了令人困惑的"不可访问"错误。

std::ostream不可复制。你必须返回一个引用:

ostream &operator<< (ostream& out, const Book & b){

我想你的意思是返回ostream的引用。

ostream& operator<< (ostream& out, const Book & b){
    out << "Title: " << b.my_Title << endl;
    out << "Author: " << b.my_Author << endl;
    out << "Number of time checkout out: " << b.my_NumberOfTimesCheckedOut;
    return(out);
}

更好的是,在新的c++版本中,您可以获得像Java一样的to_string方法。