On passe par une fonction callback qui est static que je reprend donc en c++
Le souci vien donc ce poser en c++ car la classe que je fait pour sqlite.
Je veux évidement récupérer les donnée de la base de donnée mai vu que c est une fonction callback en C static (ref la doc citer plus haut) sa ne peux pas ce faire sauf si je place une variable global.
Bon j’ai virer le reste du code pour y placer que ce qui nous interesse.
dans le *.h
//std::vector<std::string> vec_returne_valeur; //si je place sa ici sa marche évidement
class sql {
public :
bool recuperasion_donnee(std::string &table,std::string collonne_valeur, std::string recherche_quoi); //fonction qui donc appelle la fonction callback je n'en place pas le code,car le problème ne viens pas de là
private:
int callback(void *NotUsed, int argc, char **argv, char **azColName);
std::vector<std::string> vec_returne_valeur;// ici c est hors de portée et donc sa miaule
};
dans .cpp
int c_sql::callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
std::string tmp="";
std::string mystring;//conversion en de char en string
FOR(i=0; i<argc; i++)
{
std::cout << azColName[i] << " : " << argv[i]<< std::endl;
mystring = std::string(argv[i]);//conversion en de char en string
tmp=mystring;
//vec_returne_valeur.push_back(tmp); //BUG hors de portée sauf si mis en globals
}
printf("\n");
RETURN 0;
}
j’ai fait aux plus court pour montrer le problème:
donc le souci vien du fait que c’est static et une reprise du C lier a sqlite, meme si c’est placer en public (la fonction callback)
le problème reste le même.
question est donc comment faire pour éviter de placer le tableau de manière globale ?
vu que je ne peux pas toucher a première vue le nombre de paramètre ,je ne voit pas comment mis prendre.
[quote=“panthere”][quote]
sqlite.h: In static member function ‘static int c_sql::callback(void*, int, char**, char**)’:
sqlite.h:: error: invalid use of member ‘c_sql::vec_returne_valeur’ in static member function
sqlite.cpp:: error: from this location
sqlite.cpp: At global scope:
sqlite.cpp:: warning: unused parameter ‘NotUsed’
[/quote][/quote]
Comment t’a foutu tes inclusions ? Le « .h » inclus le « .cpp » ?
Ça résoud peut être pas ton problème mais je suis surpris.
Merci pour ta réponse
[edit]
bon je vai donner les sources sa ira plus vite je sens.
le fichier .sh me ser a compiler sans me taper un makefile
il te suffi de sois récupérer la ligne qui t’interesse dedans ou si tu veux t’en servir de modifier le chemin d’acès:
Rep="/chemin/daces/easy_sqlite" projet_source_cpp_sql.tar (30 KB)
J’ai touché à ton code à droite à gauche pour ne plus utiliser stdio (ce serais dommage en C++) et j’ai corrigé ton problème.
Une fonction static ne peut utiliser que des données membres statics et des fonctions membre static ou qui ne touchent pas aux données membres non static.
Donc j’ai déclaré le vector en static et je l’ai initialisé en haut du fichier sqlite.cpp (il faut initialisé les données membres statics).
Du coup ça marche. En prime j’ai créé un makefile parce que c’est tout de même plus pratique :
Merci pour le coup de pouce
j’avais essayer de me débarrasser du studio.h mai sans succès.
Merci pour les explication j’y vois un peux plus clair, sa va servir
pour le makefile j’ai de la peine a y comprendre quelque chose, mai j’imagine que si le projet deviens important sa reste indispensable, je mettrai donc le nez d’ici peux dedans