Je voulais tester un bout de code, mais je suis tombé sur une erreur de compilation. Bien que j’ai réussi a éviter je ne comprends tjr pas pourquoi ça arrive et qu’est-ce qui l’a cause ?
Voici le code :
#include <iostream>
#include <vector>
#include <cassert>
std::vector<int> matches (int j, int m);
// -----------------------------------------------------------------------------
int main ()
{
int const j { 4 };
int const m { 0 };
std::vector<int> const matches { matches (j, m) };
for (int const matche : matches)
{
std::cout << matche << std::endl;
}
return 0;
}
// -----------------------------------------------------------------------------
std::vector<int> matches (int j, int m)
{
assert (j >= 0 and "le nombre de joueurs ne doit pas etre negatif.");
assert (m >= 0 and "le nombre de matches ne doit pas etre negatif.");
std::vector<int> matches {};
while (j != 1)
{
--j;
m += j;
matches.push_back (m);
}
return matches;
}
Voici le message du compilateur :
test.cpp: In function ‘int main()’:
test.cpp:12:51: error: no match for call to ‘(const std::vector<int>) (const int&, const int&)’
std::vector<int> const matches { matches (j, m) };
^
test.cpp:12:53: error: no matching function for call to ‘std::vector<int>::vector(<brace-enclosed initializer list>)’
std::vector<int> const matches { matches (j, m) };
^
Ce message d’erreur est bien trop long que ça mais je l’ai raccourci pour que ça n’étouffe pas trop.
En remplaçant juste le nom du tableau matches
par t_matches
:
std::vector<int> const t_matches { matches (j, m) };
Ainsi j’évite l’erreur et ce bout de code s’exécute normalement et me donne le résultat prévu. Bref je voulais comprendre les circonstances qui ont provoqué l’erreur afin de ne pas refaire la même erreur. Merci en avance pour votre temps.
// —————————————————————————————————————-
Désolé pour la duplication, ce n’était pas volontaire.
+0
-0