2012-05-01 16 views
8

¿Cómo se comienza a usar las características tr1 de Visual Studio 2010? Para un caso más específico, requiero la función std :: tr1 ::. Probé incluyendo #include <tr1/functional> que reporta como desaparecido, mientras que #include <functional> incluye bien, pero cuando me puse esto:Cómo usar tr1 con Visual Studio 2010 (tr1 :: función)?

std::tr1::function<void(void)> callback; 

me sale:

1>d:\marmalade\projects\core\src\button.h(21): error C3083: 'tr1': the symbol to the left of a '::' must be a type 
1>d:\marmalade\projects\core\src\button.h(21): error C2039: 'function' : is not a member of '_STL' 
1>d:\marmalade\projects\core\src\button.h(21): error C2143: syntax error : missing ';' before '<' 
1>d:\marmalade\projects\core\src\button.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>d:\marmalade\projects\core\src\button.h(21): error C2238: unexpected token(s) preceding ';' 

Si utilizo impulso, que funciona bien, pero para este proyecto , debido al uso de un marco específico, necesitaría la versión Visual Studio tr1.

Como se sugirió, sin esperar TR1, todavía devuelve el mismo resultado:

std::function<void(void)> callback; 

1>d:\marmalade\projects\core\src\button.h(20): error C2039: 'function' : is not a member of '_STL' 
1>d:\marmalade\projects\core\src\button.h(20): error C2143: syntax error : missing ';' before '<' 
1>d:\marmalade\projects\core\src\button.h(20): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>d:\marmalade\projects\core\src\button.h(20): error C2238: unexpected token(s) preceding ';' 
+4

'tr1' significa [Informe técnico 1] (http://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1) que era una lista de adiciones propuestas al estándar C++. Una vez que las propuestas fueron aceptadas, la designación 'tr1' se volvió obsoleta. –

+0

¿'incluyó '? –

+0

Sí, lo incluí. – Speed

Respuesta

8

Según sus comentarios, y en this page, creo que Marmalade viene con su propia implementación de STL, que parece obsoleta. This page comprueba que usan una versión de STLPort, que no admite el TR1 que salió en 2005, y mucho menos nada más nuevo. Las opciones son:

1) Copiar/escribir los mismo
2) prescindir
3) Download a newer version of STLPort. No parece haber sido actualizado en los últimos dos años, por lo que no C++ 11, pero mencionan tener functional, pero no está claro si está en el espacio de nombres std o std::tr1. Sin embargo, esto podría no funcionar con Marmalade, así que haga copias de seguridad y tenga cuidado.

+1

Creo que está incluido con STLPort ([fuente] (http://www.madewithmarmalade.com/devnet/code-community)) ... Terrible. – ildjarn

+0

De hecho, es horrible :( – Speed

+2

@Speed: respuesta actualizada, una versión más reciente de STLPort _may o puede no te ayuda. –

2

Visual Studio 2010 barcos con C++ 11 activado por defecto (o al menos lo que se lleva a cabo). Necesita usar std::function<void(void)>.

Para obtener una tabla completa see here.

Como nota adicional: No debe usar nada de TR1 hoy en día. Se ha integrado en el nuevo estándar.

+0

A pesar de todo, sigo recibiendo exactamente el mismo error. 'Std :: function callback;' devuelve el error exacto, sin el primero: 'error C2039: 'función': no ​​es miembro de '_STL'' – Speed

+1

@Speed ​​Esto se ve muy sospechoso grep para cualquier' 'define' extraño – pmr