2012-05-03 27 views
6

powiedziano mi następujące było możliwe ze względu na zmiany w C++ 11:C++ 11 wywołanie konstruktora z konstruktora typu samej klasy

class SomeType { 
int number; 

public: 
SomeType(int new_number) : number(new_number) {} 
SomeType() : SomeType(42) {} 
}; 

Ale gdy próbuję zbudować otrzymuję komunikat o błędzie:

"SomeType" is not a nonstatic data member or base class of class "SomeType" 

error C2614: 'SomeType' : illegal member initialization: 'SomeType' is not a base or member 

Czy ta funkcja nie jest jeszcze obsługiwana w Visual Studio 2010? Czy muszę skonfigurować coś, aby to zbudować? Co jest nie tak?

+1

W celu późniejszego wykorzystania, są one znane jako _delegating constructors_. – ildjarn

+0

przy okazji, jest on obsługiwany w gcc (mingw-w64, devC++, code :: blocks, mingw, DJGPP) –

+1

@JimMichaels: raportowanie IDE (code :: blocks) jest nieco zaskakujące. Używam kodu :: bloki i klang ... –

Odpowiedz

10

To nie jest obsługiwane w VS2010. Większość funkcji C++ 11 nie jest obsługiwana w VS2010 (lub VS11 w tym zakresie).

Here to wykres obsługiwanych funkcji w VC10 i VC11.

+0

Frustracja! Dzięki za link. – user974967

+1

Należy pamiętać, że VS2010 pojawił się na długo przed tym, zanim projekt C++ 11 był jeszcze bliski ukończenia. Powiedziałbym, że mamy szczęście, że obsługuje to, co robi. Wsparcie Lambda w szczególności jest darem niebios. – brendanw

+3

@brendanw: C++ 11 pracowało już od dłuższego czasu. GCC 4.3 obsługiwał odniesienia rvalue i szablony variadic (na przykład) w 2008 r., 3 lata przed wysłaniem VS10 (i VS10 wysłano * bez * wsparcia dla szablonów variadic, a teraz, w 2012 r., VS11 nadal nie obsługuje go). GCC miał lambdas w 2010 roku, rok przed VS10 (a lambda w VS10 jest błędna). Teraz w 2012 roku VS11 zostanie wkrótce dostarczony ze słabym wsparciem dla C++ 11, podczas gdy GCC 4.7 został wydany w marcu z prawie pełnym wsparciem dla C++ 11. Nie sądzę, że szczęście ma z tym coś wspólnego. – GManNickG

Powiązane problemy