2012-06-01 3 views
0

Мой вопрос о новой функции C++ 11 Делегирующие конструкторы. Поэтому у меня есть два похожих ctors в моем классе, и я хотел бы упростить их реализацию. Проблема, что они оба имеют структуры в качестве параметра, и когда я попытался передать их, ошибка компиляции произошла:Как делегировать конструктор с помощью struct paramators?

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 из первого?

+3

Не делегируете конструктор 'timeval' конструктору' timeval', создавая то, что было бы бесконечной рекурсией, если это разрешено? –

+4

какой компилятор? вы уверены, что ваш компилятор поддерживает делегирование ctors? – Naveen

ответ

1

Помимо очевидной ошибки (вы пытаетесь передать в тот же конструктор) код является правильным и должен работать на г ++ 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), 
{ 
} 

Это может быть проблема с компилятором/версии.

+0

Просто потому, что это очевидно для вас, это не значит, что это очевидно для искателя. – Matt

+2

@Matt: Это может быть не очевидно, но однажды указав на это, я не думаю, что он не будет считать это очевидным. –

Смежные вопросы