2011-03-03 35 views
1
std::vector< boost::variant<std::string, int> > vec; 
std::string s1("abacus"); 
int i1 = 42; 
vec.push_back(s1); 
vec.push_back(i1); 
std::cout << vec.at(0).size() << "\n"; 

当我尝试,我得到以下错误运行该代码:的boost ::向量元素的变异和印刷方法

main.cpp:68: error: ‘class boost::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>’ has no member named ‘size’ 
make: *** [main.o] Error 1 

然而,作为一个字符串,它应该有一个大小()方法。我不确定发生了什么问题。注意,使用替换最后一行:

std::cout << vec.at(0) << "\n"; 

将打印“算盘”,符合市场预期。

回答

6

being a string it should have a size() method

这不是一个string - 这是一个variant。您首先需要告诉编译器您知道知道里面有string - 即使用boost::get<std::string>(vec[0])来检索它。请确保阅读Boost.Variant tutorial

1

你需要获得第一类这种变型(即字符串),类boost::variant您与vector::at()访问没有叫size()方法,尝试像::

boost::get<0>(vec.at(0)).size(); // I think that's the syntax....