我使用的是 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;
我还尝试用 istream 替换 istringstream。我确实收到以下错误:
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 ,那就太好了
谢谢, 弗兰克
最佳答案
引用自 Boost.Variant:
有界类型的要求是 as follows :
- CopyConstructible [20.1.3]。
- 析构函数支持不抛出异常的安全保证。
- 在变体模板实例化时完成。 (有关接受不完整类型以启用递归变体类型的类型包装器,请参阅 boost::recursive_wrapper。)
std::istringstream 不可复制构造。
关于c++ - boost 变体 istringstream 和流错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11453538/