2016-10-18 19 views
0

にI次の簡単なコードを持っている:私は使用してgccでコンパイルしよう変換 'のstd :: __ cxx11 :: <char>をのbasic_string' 'のstd :: ostream_iterator <char>'

#include <boost/program_options.hpp> 
#include <iostream> 
#include <iterator> 
#include <string> 
#include <vector> 
#include <algorithm> 

using namespace std; 
namespace po = boost::program_options; 

int main(int argc, char *argv[]) 
{ 

    po::options_description config("Configuration"); 
    config.add_options() 
     ("optimization", po::value<int>()->default_value(10), 
       "optimization level") 
     ("include-path,I", 
      po::value< vector<string> >()->composing(), 
      "include path") 
     ; 


    po::variables_map vm; 
    po::store(po::parse_command_line(argc, argv, config), vm); 

    auto popts = po::parse_config_file<char>("config.ini",config,true); 
    po::store(popts,vm); 
    po::notify(vm); 

    for(auto o:popts.options) { 
      cout << o.string_key << "=" << "\n"; 
      std::copy(o.value.begin(), o.value.end(), std::ostream_iterator<char>(std::cout, " ")); 
    } 

    return 0; 
} 

g++ -std=c++11 test.cpp 

これは私に次のエラー与える:

In file included from /usr/include/c++/6.2.1/bits/char_traits.h:39:0, 
       from /usr/include/c++/6.2.1/string:40, 
       from /usr/include/boost/program_options/errors.hpp:12, 
       from /usr/include/boost/program_options/options_description.hpp:12, 
       from /usr/include/boost/program_options.hpp:15, 
       from test.cpp:1: 
/usr/include/c++/6.2.1/bits/stl_algobase.h: In instantiation of ‘static _OI std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m(_II, _II, _OI) [with _II = std::__cxx11::basic_string<char>*; _OI = std::ostream_iterator<char>]’: 
/usr/include/c++/6.2.1/bits/stl_algobase.h:386:44: required from ‘_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = std::__cxx11::basic_string<char>*; _OI = std::ostream_iterator<char>]’ 
/usr/include/c++/6.2.1/bits/stl_algobase.h:422:45: required from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _OI = std::ostream_iterator<char>]’ 
/usr/include/c++/6.2.1/bits/stl_algobase.h:455:8: required from ‘_OI std::copy(_II, _II, _OI) [with _II = __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >; _OI = std::ostream_iterator<char>]’ 
test.cpp:33:96: required from here 
/usr/include/c++/6.2.1/bits/stl_algobase.h:324:18: error: no match for ‘operator=’ (operand types are ‘std::ostream_iterator<char>’ and ‘std::__cxx11::basic_string<char>’) 
     *__result = *__first; 
     ~~~~~~~~~~^~~~~~~~~~ 
In file included from /usr/include/c++/6.2.1/iterator:66:0, 
       from /usr/include/boost/detail/iterator.hpp:11, 
       from /usr/include/boost/iterator/iterator_traits.hpp:8, 
       from /usr/include/boost/range/iterator_range_core.hpp:26, 
       from /usr/include/boost/lexical_cast.hpp:30, 
       from /usr/include/boost/program_options/value_semantic.hpp:14, 
       from /usr/include/boost/program_options/options_description.hpp:13, 
       from /usr/include/boost/program_options.hpp:15, 
       from test.cpp:1: 
/usr/include/c++/6.2.1/bits/stream_iterator.h:193:7: note: candidate: std::ostream_iterator<_Tp, _CharT, _Traits>& std::ostream_iterator<_Tp, _CharT, _Traits>::operator=(const _Tp&) [with _Tp = char; _CharT = char; _Traits = std::char_traits<char>] 
     operator=(const _Tp& __value) 
     ^~~~~~~~ 
/usr/include/c++/6.2.1/bits/stream_iterator.h:193:7: note: no known conversion for argument 1 from ‘std::__cxx11::basic_string<char>’ to ‘const char&’ 
/usr/include/c++/6.2.1/bits/stream_iterator.h:154:11: note: candidate: std::ostream_iterator<char>& std::ostream_iterator<char>::operator=(const std::ostream_iterator<char>&) 
    class ostream_iterator 
      ^~~~~~~~~~~~~~~~ 
/usr/include/c++/6.2.1/bits/stream_iterator.h:154:11: note: no known conversion for argument 1 from ‘std::__cxx11::basic_string<char>’ to ‘const std::ostream_iterator<char>&’ 

は、私が何をしないのですか?これはABIの非互換性ですか?

私はgcc 6.2.1を使用し、1.61をブーストしています。

(注:はい、私は、同様のブーストライブラリをリンクする必要がありますが、ここでの問題は、コンパイラのエラーである)

答えて

1

はエラーを自分自身を発見しました。

代わりの

std::copy(o.value.begin(), o.value.end(), std::ostream_iterator<char>(std::cout, " ")); 

それは

std::copy(o.value.begin(), o.value.end(), std::ostream_iterator<string>(std::cout, " ")); 

(代わりにstringの間違ったテンプレートパラメータchar)されている必要があります。

関連する問題