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";

当我尝试运行此代码时,出现以下错误:

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

然而,作为一个字符串,它应该有一个 size() 方法。我不确定出了什么问题。请注意,将最后一行替换为:

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

将按预期打印“算盘”。

4

2 回答 2

6

作为一个字符串,它应该有一个 size() 方法

这不是一个string- 它是一个variant。您首先需要告诉编译器您知道有一个string内部 - 即使用boost::get<std::string>(vec[0]).

请务必阅读Boost.Variant 教程

于 2011-03-03T11:22:05.280 回答
1

您需要获取此变体的第一种类型(即字符串),boost::variant您正在访问的类vector::at()没有调用方法size(),请尝试以下操作:

boost::get<0>(vec.at(0)).size(); // I think that's the syntax....
于 2011-03-03T11:22:10.843 回答