2010-05-07 15 views
16

que escribí este programa en VC++ 2010:initializer_list que no trabajan en VC10

class class1 
{ 
public: 
class1 (initializer_list<int> a){}; 
int foo; 
float Bar; 
}; 
void main() 
{ 
class1 c = {2,3}; 
getchar(); 
} 

pero me sale este error cuando compilo proyecto:

error C2552 1 error: 'c': no -aggregates no se puede inicializar con lista de inicialización C: \ Users \ pswin \ documents \ visuales estudio 2010 \ projects \ test_C++ 0x \ test_C++ 0x \ main.cpp 27

y

2 IntelliSense: inicialización con '{...}' no está permitido para el objeto de tipo "clase 1" C: \ Users \ pswin \ documents \ Visual Studio 2010 \ projects \ test_C++ 0x \ test_C++ 0x \ main.cpp 27

¿cuál es el problema?

+0

suena como que necesita usar matrices para esta característica ... "agregados" realmente suena así ... :) – Zoltan

Respuesta

34

No debe ser apoyada at all:

[...] la función de C++ 0x Core Lenguaje de las listas de inicializador y los cambios asociados biblioteca estándar no fueron implementados en VC10.

El mensaje de error se refiere a la pre-C++ función de inicialización de agregados 0x, que permite la inicialización de ciertos tipos definidos por el usuario mediante el uso de llaves:

struct pair { int first; char second; }; 
pair p = { 0, 'c' }; 

Los agregados se definen en §8.5.1:

un agregado es una matriz o una clase (cláusula 9) sin constructores-declarado de usuario (12.1), no hay miembros de datos no estáticos privadas o protegidas (cláusula 11), hay una base do lasses (cláusula 10) y sin funciones virtuales (10.3).

Cuando un agregado se inicializa el inicializador puede contener una cláusula inicializador que consiste en un brace- cerrado, lista separada por comas de inicializador-cláusulas para los miembros del agregado, escritos en orden creciente subíndice o miembro. Si el agregado contiene subagregados, esta regla se aplica recursivamente a los miembros del subaggregado.

Cuestiones relacionadas