2010-10-03 6 views
5

Selon le C++0x spec, ce qui suit est légalC++ 0x Constructor Peer dans VC2010

class A { 
    A(int i) : x(i) {} 
    A() : A(0) {} 
    int x; 
}; 

Mais il ne parvient pas à compiler ("A" is not a nonstatic data member or base class of class "A") dans VC 2010. Tout le monde sait ce qui ne va pas?

+0

Vous n'avez peut-être pas spécifié C++ 0x dans les paramètres de votre compilateur. – JoshD

+4

Ce n'est pas la spécification C++ 0x. La spécification C++ 0x est toujours en brouillon et en attente d'approbation, et ne ressemble en rien à wikipedia. Voici le «projet de comité final»: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf –

Répondre

8

Visual C++ 2010 (également connu sous le nom VC++ 10.0) à l'heure où nous écrivons ne prend pas en charge la délégation de constructeurs, ce qui est nécessaire pour votre fragment de code. VC++ 10.0 ne supporte que partiellement C++ 0x, et à ce jour, aucun compilateur n'a implémenté l'ensemble des fonctionnalités C++ 0x (bien que cela changera bientôt, surtout une fois que le standard C++ 0x sera finalisé).

Scott Meyers ont a summary of C++0x support in gcc and MSVC compilers. Voici une autre liste de C++0x feature support in different compilers. De même, a list of C++0x features supported in Visual C++ 2010 straight from the horse's mouth.

Pour l'instant, tous les membres initialize directement dans la liste d'initialisation de vos constructeurs:

class A 
{ 
public: 
    A(int i) : x(i) {} 
    A() : x(0) {} 
private: 
    int x; 
}; 
+0

Étonnamment, A() {A (0); } fonctionne pour une raison quelconque. – jameszhao00

+6

@ jameszhao00: Cela "fonctionne" car ce n'est pas un constructeur délégué. Vous créez un 'A' temporaire non nommé qui sera détruit une fois que le constructeur aura fini, ce qui n'est pas ce que vous voulez. –

+0

Bon point! Merci pour cette précision. Trop utilisé pour Java/C# je suppose :( – jameszhao00

0

MSVC++ 2010 ne prend pas en charge pour delegating constructor

This page listes C + 0x caractéristiques et leur soutien dans les compilateurs populaires.