boost::variant 可以与 std::string 一起使用吗?
我使用 boost::variant 用 C++ 编写了一个简单的程序。程序的代码如下所示。
#include <string>
#include <iostream>
#include <boost/variant.hpp>
int main (int argc, char** argv)
{
boost::variant<int, std::wstring> v;
v = 3;
std::cout << v << std::endl;
return 0;
}
但是当我尝试用命令编译它时,
g++ main.cpp -o main -lboost_system
我
/usr/include/boost/variant/detail/variant_io.hpp:64: error: no match for ‘operator<<’ in ‘((const boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >*)this)->boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >::out_ << operand’
后面跟着一堆候选函数。
我缺少什么?有趣的是,当我使用 std::string
而不是 std::wstring
时,一切都很好。
提前致谢。
I've written a simple program in C++ with use of boost::variant. Program's code is presented below.
#include <string>
#include <iostream>
#include <boost/variant.hpp>
int main (int argc, char** argv)
{
boost::variant<int, std::wstring> v;
v = 3;
std::cout << v << std::endl;
return 0;
}
But when I try to compile this with command
g++ main.cpp -o main -lboost_system
i get
/usr/include/boost/variant/detail/variant_io.hpp:64: error: no match for ‘operator<<’ in ‘((const boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >*)this)->boost::detail::variant::printer<std::basic_ostream<char, std::char_traits<char> > >::out_ << operand’
followed by a bunch of candidate functions.
What I'm missing? The funny thing is When I use std::string
instead of std::wstring
everything works great.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题是
wstring
不能是cout
中的<<
。尝试使用wcout
代替。这不是变体的问题。The problem is that
wstring
cannot be<<
incout
. Try usingwcout
instead. This is not a problem with the variant.使用
wcout
,而不是cout
。因为您使用的是wstring
,而不是string
。演示:http://ideone.com/ynf15
Use
wcout
, notcout
. Because you're usingwstring
, notstring
.Demo : http://ideone.com/ynf15