2012-07-12 16 views
1

我正在使用Visual Studio 2010 sp1。与C++和提升1.47在Windows 7boost变体istringstream和流错误

我有以下代码:

typedef boost::variant<unsigned int,int,long,double,bool,string,istringstream,int32_t, 
           uint32_t,int64_t,uint32_t,sql::SQLString> SQLVariant; 

我也尝试更换istringstream为istream的。我确实收到以下错误:

Error 13 error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : 
no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>' 
c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream 860 

如果我声明了istringstream i;我没有得到错误。如果我声明istream i2,我会得到类似的错误;

我在做什么错?

我需要istream或派生类的原因,这是为我正在处理的SQL库。具体来说,对于mysql的实现,我需要一个istream或istringstream来调用setBlob ...

我发现一个临时解决方法,允许传递一个字符串,并初始化stringstream与字符串。然而,这将是很好,如果我的变量类型可以采取istreamstream或者更好的是istream

感谢, 弗兰克

回答

2

从Boost.Variant报价:

上有限制类型的要求是as follows

  • CopyConstructible [20.1.3]。
  • 破坏者坚持不抛异常的安全保证。
  • 在变体模板实例化处完成。 (请参阅boost :: recursive_wrapper以了解接受不完整类型以启用递归变体类型的类型包装器。)

std :: istringstream不是可复制构建的。

+0

那我该怎么办呢? – Blues76 2012-07-12 17:39:42

+1

@ user1520994:你可以存储'std :: shared_ptr ',因为'std :: shared_ptr <>'是可复制的。 – ildjarn 2012-07-12 18:58:36