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できないこと<<ですcoutwcout代わりに使用してみてください。これはバリアントの問題ではありません。

于 2011-09-24T09:11:36.090 に答える
2

wcoutではなく、使用してくださいcoutwstringではなくを使用しているためですstring

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

デモ: http://ideone.com/ynf15

于 2011-09-24T09:11:26.913 に答える