2012-05-01 15 views
8

Come si inizia a utilizzare le funzionalità tr1 di Visual Studio 2010? Per un caso più specifico, richiedo la funzione std :: tr1 ::. Ho cercato tra cui #include <tr1/functional> che riporta come mancante, mentre #include <functional> comprende bene, ma quando ho creato questo:Come utilizzare tr1 con Visual Studio 2010 (tr1 :: function)?

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

ottengo:

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 ';' 

Se uso spinta, funziona benissimo, ma per questo progetto , a causa dell'utilizzo di un framework specifico richiederei la versione tr1 di Visual Studio.

Come suggerito, saltando il TR1, restituisce comunque lo stesso risultato:

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' sta per [Rapporto tecnico 1] (http://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1) che era un elenco di aggiunte proposte allo standard C++. Una volta accettate le proposte, la designazione 'tr1' è diventata obsoleta. –

+0

hai incluso ''? –

+0

Sì, l'ho incluso. – Speed

risposta

8

Sulla base dei vostri commenti, e su this page, penso che Marmalade abbia la propria implementazione STL, che appare obsoleta. This page verifica che utilizzino una versione di STLPort, che non supporta il TR1 uscito nel 2005, tanto meno nulla di più recente. Le opzioni disponibili sono:

1) Copia/scrivere quelli soli
2) fare a meno
3) Download a newer version of STLPort. Non sembra che sia stato aggiornato negli ultimi due anni, quindi non C++ 11, ma menzionano avere functional, ma non sono chiari se si trova nello spazio dei nomi std o std::tr1. Tuttavia, questo potrebbe non funzionare con Marmalade, quindi effettuare backup e fare attenzione.

+1

Penso che sia solo in bundle con STLPort ([fonte] (http://www.madewithmarmalade.com/devnet/code-community)) ... Terribile. – ildjarn

+0

In effetti, è orrendo :( – Speed

+2

@ Speed: risposta aggiornata, una versione più recente di STLPort _ maggio o maggio –

2

Visual Studio 2010 viene fornito con C++ 11 abilitato di default (o almeno quello che è implementato). Devi usare std::function<void(void)>.

Per una tabella completa see here.

Come parte a parte: non si dovrebbe usare nulla da TR1 al giorno d'oggi. È stato integrato nel nuovo standard.

+0

In ogni caso, ho ancora lo stesso errore. 'Std :: function callback;' restituisce l'errore esatto, senza il primo errore: 'errore C2039: 'funzione': non è un membro di '_STL'' – Speed

+1

@Speed ​​Sembra molto sospetto. grep per qualsiasi" definizione "strano. – pmr