0

私の質問は、新しい C++11 機能の委任コンストラクターについてです。私のクラスには2つの同様のctorがあり、それらの実装を簡素化したいと考えています。両方ともパラメーターとして構造体を持っており、それらを委任しようとすると、コンパイラ エラーが発生するという問題:

error: type ‘MyClass’ is not a direct base of ‘MyClass’

だからここに前があります:

MyClass::MyClass ( const timeval & TV ) :
      Seconds ( TV.tv_sec),
      USeconds ( TV.tv_usec ),
{
}

MyClass::MyClass ( const timespec & TS ) :
        Seconds ( TS.tv_sec),
        USeconds ( TS.tv_nsec * 1000 ),
{
}

後:

MyClass::MyClass ( const timeval & TV ) :
      MyClass ( timeval { TV.tv_sec, TV.tv_usec/1000 } )
{
}

MyClass::MyClass ( const timespec & TS ) :
        Seconds ( TS.tv_sec),
        USeconds ( TS.tv_nsec * 1000 ),
{
}

最初のctorから2番目のctorを正しく呼び出す方法を知っている人はいますか?

4

1 に答える 1

1

明らかなエラー (同じコンストラクターに委譲しようとしている) に加えて、コードは正しく、g++4.7 で動作するはずです。

MyClass::MyClass ( const timeval & TV ) :
      MyClass ( timespec { TV.tv_sec, TV.tv_usec/1000 } )
{
}

MyClass::MyClass ( const timespec & TS ) :
        Seconds ( TS.tv_sec),
        USeconds ( TS.tv_nsec * 1000 ),
{
}

コンパイラ/バージョンに問題がある可能性があります。

于 2012-06-01T17:34:08.970 に答える