2010-01-13 7 views
2

J'essaye de créer une fonction simple qui fait un test simple et renvoie vrai ou faux.Comment créer une fonction boost :: lambda simple?

myfunct = (_3 < someArray[i]); 

Quand je fais cela, je reçois cette erreur:

error: no match for 'operator<' in '<unnamed>::_1 < depths[i]' 

Ce que je souhaite est d'obtenir quelque chose d'équivalent à ce

bool myFunct(unsigned int a, unsigned int b, unsigned int c, unsigned int d) 
{ 
    return c < 22; // Suppose 22 was in someArray[i] 
} 

Répondre

3

Êtes-vous sûr que vous avez le droit namespaces ?

Il devrait être soit

using namespace boost::lambda; 

ou

boost::lambda::_1 

Rappelez-vous que les espaces réservés sont utilisés dans d'autres parties de boost, ou dans d'autres bibliothèques (conflit avec une TR1 locale peut arriver!), Qui peut induire des erreurs.

+0

Oui, je pense que c'est mon problème. Je pensais à ce sujet sur mon chemin de travail (après avoir posté cette question), mais je ne pouvais pas le tester parce que mon code était à la maison. Vous venez de le confirmer. Merci. –

2

La compilation suivante sans aucune erreur, à quoi ressemble le reste de votre code?

#include <boost/function.hpp> 
#include <boost/lambda/lambda.hpp> 

using namespace boost; 
using namespace boost::lambda; 

int main(void) 
{ 
    int someArray[5]; 
    int i; 
    function<bool(int,int)> f = (_1 < someArray[i]); 
} 
+0

+1: pour le code actuel - pas d'accès à un compilateur en ce moment, donc je ne pouvais pas fournir cela: / –

Questions connexes