J'ai un problème me disant que la fonction "transform" prend 5 paramètres et pas 4
Bizarre!
Version imprimable
J'ai un problème me disant que la fonction "transform" prend 5 paramètres et pas 4
Bizarre!
Poste ton code en entier et on verra peut être une erreur dedans...
Si il te dit que la methode n'a pas le bon nombre d'arguments, n'y aurait il pas un problème de namespace?
Il y a 2 versions de std::transform :
- 4 arguments :
1 seul intervalle source :
- 5 arguments : deux intervalles source :Code:
1
2
3 transform (coll1.begin(), coll1.end(), // source range coll1.begin(), // destination range negate<int>()); // operation
Après je ne sais pas pourquoi Visual ne t'autorise pas la première version.Code:
1
2
3
4
5
6 // print differences of two corresponding elements cout << "diff: "; transform (coll1.begin(), coll1.end(), // first source range coll2.begin(), // second source range ostream_iterator<int>(cout, " "), // destination range minus<int>()); // operation
Pour ton problème essayes peut être :
(non testé)Code:
1
2
3
4
5 std::transform(vect.begin(), vect.end(), vect.begin(), std::back_inserter(vectint), &StringToInt);
[QUOTE=befalimpertinent;2529091]Il y a 2 versions de std::transform :
- 4 arguments :
1 seul intervalle source :
- 5 arguments : deux intervalles source :Code:
1
2
3 transform (coll1.begin(), coll1.end(), // source range coll1.begin(), // destination range negate<int>()); // operation
Après je ne sais pas pourquoi Visual ne t'autorise pas la première version.Code:
1
2
3
4
5
6 // print differences of two corresponding elements cout << "diff: "; transform (coll1.begin(), coll1.end(), // first source range coll2.begin(), // second source range ostream_iterator<int>(cout, " "), // destination range minus<int>()); // operation
[\QUOTE]
Merci pour l'explication des 5 arguments. je ne connaissait pas.
Mais Visual accepte la première version.
Le bout de code que j'ai donné marche sous visual et gcc
Maintenat le débogueur me dit qu'il y a un 5 arguments alors qu'il en faut 4.
Je dois avoir une autre erreur qui engendre celle-ci!
Mon code:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 {.... std::vector< int > VecDataInt; std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),&StringToInt); f2.Close(); } int CData::StringToInt (std::string &s) { std::istringstream iss( s); // convertir en un int int nombre; iss >> nombre; return nombre; }
essai plustôt
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 int StringToInt (std::string &s) { std::istringstream iss( s); // convertir en un int int nombre; iss >> nombre; return nombre; } {.... std::vector< int > VecDataInt; std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),&StringToInt); f2.Close(); }
pour ton code il aurait fallu faire :
Code:
1
2
3
4
5
6
7
8
9
10
11
12 class CData { ... static int StringToInt (std::string &s); ... } {.... std::vector< int > VecDataInt; std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),&CData::StringToInt); }
Merci beaucoup.
Pourquoi il faut que la valeur retouréne soit statique?
ou plutôt:
avec c_data instance de C_DataCode:std::transform(m_VecDataRead.begin(),m_VecDataRead.end(), std::back_inserter(VecDataInt),boost::bind(&CData::StringToInt, boost::ref(c_data), _1) );
ce n'est pas la valeur retourné mais la fonction qui est static. I.E.: deviens indépendant de la class et n'as donc pas besoin d'une instance pour être utilisé.
Juste une question. Peut être dans un de tes autre post. Pourquoi ne remplie tu pas directement un vecteur de int? sans passer par un vecteur de string?
Je récupére mes données (entier pour l'instant) et string (plus tard) à partir d'un fichier au format texte.
Je ne sais pas comment on fait pour lire les données au bon format en lisant les données (si on sait de qu'elle type elles sont)
Tu peut te baser sur le fonction StringToInt.
En gros tu lie une string et tu la convertie en ce que tu veut. Puis tu stock le résultat.
Pour les type primitif tu pourrai utiliser une fonction template
ou T et le type que tu veutCode:
1
2
3
4
5
6
7
8
9
10
11 //peut être que le const est en trop template <class T> T ConvertString (const std::string &s) { std::istringstream iss( s); // convertir en T T tmp; iss >> tmp; return tmp; }
par exemple
Code:
1
2
3 std::string s("10"); int nombre = ConvertString <int>(s);