4

我使用 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一切都很好时。

提前致谢。

4

2 回答 2

6

问题是wstring不能<<cout. 尝试wcout改用。这不是变体的问题。

于 2011-09-24T09:11:36.090 回答
2

使用wcout,不使用cout。因为您使用的是wstring,而不是string

std::wcout <<  v << std::endl;
   //^^^^ note

演示:http: //ideone.com/ynf15

于 2011-09-24T09:11:26.913 回答