Assignation d'une variable avec la valeur de retour d'une méthode de classe (VC11)
Voici ma problématique. J'ai une classe client qui ressemble à ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
#include <string>
using namespace std;
class client
{
string _firstname;
string _lastname;
public:
client();
client(string,string);
~client();
string firstname();
string lastname();
}; |
Et voici ce que fait la méthode qui retourne _firstname (c'est tout con) :
Code:
1 2 3 4 5
|
string client::firstname()
{
return _firstname;
} |
Mon souci vient du fait que je souhaite utiliser sqlite et une des méthodes (pour lier des paramètres à la requête) a cette signature :
Code:
1 2 3
|
// le 3ième paramètre, const char*, est la valeur que je souhaite passer
SQLITE_API int SQLITE_STDCALL sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*)); |
Dans ma grande naïveté, j'ai pensé qu'en exécutant le code suivant tout était bon (c_str() retourne un const char* vers le contenu de ma string):
Code:
1 2
|
sqlite3_bind_text(stmt, 1, client.firstname().c_str(), client.firstname().size(), SQLITE_STATIC); |
Mais aucune valeur n'est inscrite dans la BD.
Si je fais l'opération suivante, tout fonctionne :
Code:
1 2 3
|
string buf = client.firstname();
sqlite3_bind_text(stmt, 1, buf.c_str(), client.firstname().size(), SQLITE_STATIC); |
Quelqu'un peut m'expliquer pourquoi je ne peux pas utiliser c_str() directement sur la valeur retournée par la méthode de ma classe?
À noter, j'utilise Visual Studio 2012 (VC11). Lorsqu'un collègue compile et exécute le code (XCode sous OSX) tout fonctionne sans problème.
Est-ce que c'est un problème de compilateur qui ne prend pas en charge ce type d'opération de la façon que je croyais? C'est peut-être une fonctionnalité dans une version plus récente du standard...?
Merci beaucoup!