2

これによりエラーが発生するのはなぜですか:Test::Test: no overloaded function takes 2 arguments

class Test
{
public:
    Test(const std::vector<int>&)
    {
    }
};

Test test(boost::assign::list_of(4));
4

1 に答える 1

4

boost::assign::list_of の実装では、コンテナ タイプ (この場合は Test クラス) に、コンテナを初期化するための最初と最後のイテレータ (範囲) を受け取る 2 つの引数のコンストラクタが必要です。

具体的には、エラーは、boost::assign_detail::converter クラスの convert メソッドの return Container を含む以下の行から発生します。

    template< class Container >
    Container convert( const Container*, default_type_tag ) const
    {
        return Container( begin(), end() );
    }

hmjd の回避策が成功する理由は、std::vector が 2 つのイテレータを取るコンストラクタを持つためです。

于 2012-11-16T17:52:00.000 に答える