编译错误C2448返回标准流
compiler error C2448 returning a std stream
我有一个Visual Studio 2008 c++程序,我有自己的流实现。像这样:
class Foo : public std::ostream
{
public:
Foo( int a ) : std::ostream( &buf_ ) { };
Foo( boost::shared_ptr< int > a ) : std::ostream( &buf_ ) { };
private:
std::filebuf buf_;
};
class Bar
{
public:
Foo GetFoo() { return Foo( 1 ); };
Foo GetFoo2() { return Foo( boost::shared_ptr< int >( new int( 1 ) ) ); };
};
预期的用法如下:
Bar b;
Foo f = b.GetFoo(); // works fine
Foo f2 = b.GetFoo2(); // compiler error
不幸的是,这给了我一个关于basic_ios复制构造函数的编译错误。
error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'
为什么第一个Foo( int )
构造器可以与编译器,但一个涉及boost::shared_ptr
不是?
谢谢,PaulH
您的Foo
类继承自一个不可复制的类,但您没有实现复制构造函数。当按值传递Foo
的实例时,就像在getter函数中所做的那样,一定会遇到麻烦。
GetFoo
工作的原因可能是返回值优化省略了复制构造,但这并不意味着您可以这样做。
相关文章:
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 返回标准::移动(m_field)还是返回m_field?
- 我应该返回什么而不是标准::shared_ptr<>&?
- 标准::p空气<自动,自动>返回类型
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 如何在标准::p空气中返回标准::lock_guard
- 我可以从标准::访问返回汽车吗?
- 是否有一些东西限制了未来引入多个返回值C++标准?
- 无法返回派生类型的标准::unique_ptr<>
- C 标准:通过复制返回以初始化无RVO的参考:是否有任何副本
- 如何重置标准::计数返回值
- 将窗口的样式从标准更改为没有标题栏和返回
- registerPointPickingCallback (PCLViewer::callback_Test,(void*)&viewer);返回 C3687 非标准语法;使用"&"创建指向成员的指针
- 迭代器的标准接口::operator*返回的比T&和std::p air更多
- 标准::数组是否可安全返回
- 如何从地图返回标准::p空气的指针并将其放入vector<*std::p air...>
- C++标准是否保证函数返回值具有常量地址?
- C++11 标准中的哪些条款允许我消除下面“A::operator-()”中“返回”语句中的“A”
- 标准库对象作为返回类型和函数参数
- C++11 标准::regex_match 返回额外的字符