2011-09-24 95 views
4

我用C++編寫了一個使用boost :: variant的簡單程序。程序代碼如下。boost :: variant與std :: string一起工作嗎?

#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時,一切都很好。

在此先感謝。

回答

6

的問題是,wstring不能在cout<<。請嘗試使用wcout代替。這不是變體的問題。

+0

當然,你是對的。我是多麼愚蠢...... :) – stilz

+0

還有一個問題:當我想在boost :: variant中混合字符串和wstring時該怎麼辦?在這種情況下,wcout不起作用。 – stilz

+0

現在不要真的。這可能是不可能的。也許你可以創建一個訪問者輸出到'cout'或'wcout',這取決於變體中包含的類型,但是這不允許你使用好的語法'std :: cout << v'。 – neodelphi

2

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

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

演示:

+0

也許你知道,爲什麼這不能編譯:http://pastebin.com/9W2SvLki? – stilz

相關問題