1

我正在使用 Visual Studio 2010 sp1。在 Windows 7 中使用 c++ 和 boost 1.47

我有以下代码:

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 ...

我找到了一个临时解决方法,允许传递一个字符串并用该字符串初始化字符串流。但是,如果我的变体类型可以采用 istreamstream 或更好的 istream,那就太好了

谢谢,弗兰克

4

1 回答 1

2

引用 Boost.Variant:

有界类型的要求如下

  • CopyConstructible [20.1.3]。
  • 析构函数坚持不抛出异常的安全保证。
  • 在变体模板实例化点完成。(有关接受不完整类型以启用递归变体类型的类型包装器,请参见 boost::recursive_wrapper。)

std::istringstream 不可复制构造。

于 2012-07-12T14:20:27.240 回答