Bonjour, il y a quelque temps que j'ai pas fait de C++ et de plus j'ai
échangé gcc 2.95 contre 3.4.2, et je n'arrive pas a compiler le bout de
code suivant, je ne comprend pas pourquoi, j'ai du louper un chapitre:
Bonjour, il y a quelque temps que j'ai pas fait de C++ et de plus j'ai échangé gcc 2.95 contre 3.4.2, et je n'arrive pas a compiler le bout de code suivant, je ne comprend pas pourquoi, j'ai du louper un chapitre:
gcc 3.4 est /beaucoup/ plus respectueux du standard que 2.95. La migration est difficile mais ça vaut le coup !
(je ne sais plus exactement avec quoi il y a ambiguité, mais il faut preciser au compilo que std::map<Key, int>::iterator est un type)
-- Matthieu
Thierry Noc <thierry.noc@ifrance.com> writes:
Bonjour, il y a quelque temps que j'ai pas fait de C++ et de plus j'ai
échangé gcc 2.95 contre 3.4.2, et je n'arrive pas a compiler le bout de
code suivant, je ne comprend pas pourquoi, j'ai du louper un chapitre:
gcc 3.4 est /beaucoup/ plus respectueux du standard que 2.95. La
migration est difficile mais ça vaut le coup !
Bonjour, il y a quelque temps que j'ai pas fait de C++ et de plus j'ai échangé gcc 2.95 contre 3.4.2, et je n'arrive pas a compiler le bout de code suivant, je ne comprend pas pourquoi, j'ai du louper un chapitre:
gcc 3.4 est /beaucoup/ plus respectueux du standard que 2.95. La migration est difficile mais ça vaut le coup !
(je ne sais plus exactement avec quoi il y a ambiguité, mais il faut preciser au compilo que std::map<Key, int>::iterator est un type)
-- Matthieu
Stanislas RENAN
Bonjour,
Thierry Noc writes:
std::map<Key, int>::iterator iter;
typename std::map<Key, int>::iterator iter;
(je ne sais plus exactement avec quoi il y a ambiguité, mais il faut preciser au compilo que std::map<Key, int>::iterator est un type)
il me semble que c'est quand tu déclares un pointeur :
std::map<Key, int>::iterator * iter;
sans "typename", le caractère "*" est interprété comme une multiplication, et std::map<Key, int>::iterator comme un membre à multiplier. Pour que l'interprétation du source soit correcte, il faut préciser typename.
-- Stanislas RENAN
Bonjour,
Thierry Noc <thierry.noc@ifrance.com> writes:
std::map<Key, int>::iterator iter;
typename std::map<Key, int>::iterator iter;
(je ne sais plus exactement avec quoi il y a ambiguité, mais il faut
preciser au compilo que std::map<Key, int>::iterator est un type)
il me semble que c'est quand tu déclares un pointeur :
std::map<Key, int>::iterator * iter;
sans "typename", le caractère "*" est interprété comme une
multiplication, et std::map<Key, int>::iterator comme un membre à
multiplier.
Pour que l'interprétation du source soit correcte, il faut préciser
typename.
(je ne sais plus exactement avec quoi il y a ambiguité, mais il faut preciser au compilo que std::map<Key, int>::iterator est un type)
il me semble que c'est quand tu déclares un pointeur :
std::map<Key, int>::iterator * iter;
sans "typename", le caractère "*" est interprété comme une multiplication, et std::map<Key, int>::iterator comme un membre à multiplier. Pour que l'interprétation du source soit correcte, il faut préciser typename.
-- Stanislas RENAN
Gabriel Dos Reis
Stanislas RENAN writes:
| Bonjour, | | | | > Thierry Noc writes: | > | >> std::map<Key, int>::iterator iter; | > typename std::map<Key, int>::iterator iter; | > | | > (je ne sais plus exactement avec quoi il y a ambiguité, mais il faut | > preciser au compilo que std::map<Key, int>::iterator est un type) | > | il me semble que c'est quand tu déclares un pointeur : | std::map<Key, int>::iterator * iter; | | sans "typename", le caractère "*" est interprété comme une | multiplication, et std::map<Key, int>::iterator comme un membre à | multiplier. | Pour que l'interprétation du source soit correcte, il faut préciser | typename.
est-ce que la ligne #1 est une déclaration de variable ou un appel de la fonction à T::X?
-- Gaby
Stanislas RENAN <nomail@genigraph.fr> writes:
| Bonjour,
|
|
|
| > Thierry Noc <thierry.noc@ifrance.com> writes:
| >
| >> std::map<Key, int>::iterator iter;
| > typename std::map<Key, int>::iterator iter;
| >
|
| > (je ne sais plus exactement avec quoi il y a ambiguité, mais il faut
| > preciser au compilo que std::map<Key, int>::iterator est un type)
| >
| il me semble que c'est quand tu déclares un pointeur :
| std::map<Key, int>::iterator * iter;
|
| sans "typename", le caractère "*" est interprété comme une
| multiplication, et std::map<Key, int>::iterator comme un membre à
| multiplier.
| Pour que l'interprétation du source soit correcte, il faut préciser
| typename.
| Bonjour, | | | | > Thierry Noc writes: | > | >> std::map<Key, int>::iterator iter; | > typename std::map<Key, int>::iterator iter; | > | | > (je ne sais plus exactement avec quoi il y a ambiguité, mais il faut | > preciser au compilo que std::map<Key, int>::iterator est un type) | > | il me semble que c'est quand tu déclares un pointeur : | std::map<Key, int>::iterator * iter; | | sans "typename", le caractère "*" est interprété comme une | multiplication, et std::map<Key, int>::iterator comme un membre à | multiplier. | Pour que l'interprétation du source soit correcte, il faut préciser | typename.
est-ce que la ligne #1 est une déclaration de variable ou un appel de la fonction à T::X?
euh... je ne vois pas le rapport avec le problème précédent. J'ai dit une bêtise ?
Oui...
-- Loïc
Gabriel Dos Reis
Repondre sur le NG writes:
| | > template<class T> | > void f(int x) { | > if (true) { | > T::X(x); // #1 | > abs(x); | > } | > } | > est-ce que la ligne #1 est une déclaration de variable ou un appel de | > la fonction à T::X? | euh... je ne vois pas le rapport avec le problème précédent.
Le rapport est que ce n'est pas seulement dans le contexte de déclaration de pointeur. Le message n'était pas une contradiction, mais un complément d'information :-) Je remets du contexte :
# > (je ne sais plus exactement avec quoi il y a ambiguité, mais il faut # > preciser au compilo que std::map<Key, int>::iterator est un type) # > # il me semble que c'est quand tu déclares un pointeur : # std::map<Key, int>::iterator * iter;
-- Gaby
Repondre sur le NG <invalid@free.fr> writes:
|
| > template<class T>
| > void f(int x) {
| > if (true) {
| > T::X(x); // #1
| > abs(x);
| > }
| > }
| > est-ce que la ligne #1 est une déclaration de variable ou un appel de
| > la fonction à T::X?
| euh... je ne vois pas le rapport avec le problème précédent.
Le rapport est que ce n'est pas seulement dans le contexte de
déclaration de pointeur. Le message n'était pas une contradiction,
mais un complément d'information :-) Je remets du contexte :
# > (je ne sais plus exactement avec quoi il y a ambiguité, mais il faut
# > preciser au compilo que std::map<Key, int>::iterator est un type)
# >
# il me semble que c'est quand tu déclares un pointeur :
# std::map<Key, int>::iterator * iter;
| | > template<class T> | > void f(int x) { | > if (true) { | > T::X(x); // #1 | > abs(x); | > } | > } | > est-ce que la ligne #1 est une déclaration de variable ou un appel de | > la fonction à T::X? | euh... je ne vois pas le rapport avec le problème précédent.
Le rapport est que ce n'est pas seulement dans le contexte de déclaration de pointeur. Le message n'était pas une contradiction, mais un complément d'information :-) Je remets du contexte :
# > (je ne sais plus exactement avec quoi il y a ambiguité, mais il faut # > preciser au compilo que std::map<Key, int>::iterator est un type) # > # il me semble que c'est quand tu déclares un pointeur : # std::map<Key, int>::iterator * iter;