Bonsoir.

Le compilateur de Visual C++ 6 rejette le programme qui suit
(Edit : si on n'indique pas le paramètre v dans le prototype), en objectant que le paramètre de la fonction afficherLaTaille n'est pas déclaré.
Si onajoute le paramètre au prototype, tout va comme souhaité.

Pourtant, il n'est pas obligatoire d'indiquer le paramètre dans un prototype (Stroustrup, Le langage C++, 2e éd. fr., p. 160).

Quelqu'un en sait-il plus que moi là-dessus ? Merci d'avance pour la réponse.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
// ParametreDansPrototypeTemplate.cpp
// Illustre quelque chose qui me paraît anormal :
// obligation de mettre un paramètre
// dans le prototype d'une fonction "template".
 
#include <iostream>
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
#include <vector>
// using std::vector; // Cet "using" est à ne pas utiliser,
// d'après Deitel, p. 978.
 
 
class myString
{
public:
  myString(const string & s = "") {laChaine = s;}
 
private:
  string laChaine;
};
 
 
template<class T> void afficherLaTaille(std::vector<T> & v);
// prototype.
// Si on n'indique pas le paramètre dans le prototype,
// le compilateur (Visual C++ 6)
// objecte que le paramètre de la fonction
// afficherLaTaille(std::vector<T> & v)
// n'est pas défini.
 
 
int main()
{
  int TAILLE = 2; // par exemple
  std::vector<myString> w(TAILLE);
  w[0] = myString(string("a"));
  w[1] = myString(string("bc"));
 
  afficherLaTaille(w);
  return 0;
}
 
template<class T> void afficherLaTaille(std::vector<T> & v)
{
  cout << v.size() << endl;
}
M.