Le bout de code suivant:
typedef map < Str, Str, less < Str > > Table;
me donne l'erreur de compilation suivante:
parse error before `<'
Je ne sais pas du tout ce que celà siginfie. Quelqu'un peut-il m'aider?
Merci d'avance.
Le bout de code suivant:
typedef map < Str, Str, less < Str > > Table;
me donne l'erreur de compilation suivante:
parse error before `<'
Je ne sais pas du tout ce que celà siginfie. Quelqu'un peut-il m'aider?
Merci d'avance.
Erreur de syntaxe. Probablement qu'un identifiant n'est pas défini. Sans quelques lignes de code en plus, je ne peux pas t'aider plus.
Ce ne serait pas juste une question de std:: ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef std::map < Str, Str, std::less < Str > > Table;
Cette fois-ci, je donne un peu plus de code:
Selenite: Je pense que Str est défini par str.h.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "str.h" using namespace std; class PropertyTbl { public: typedef map < Str, Str, less < Str > > Table; typedef Table::iterator Iter; typedef Table::const_iterator C_Iter; typedef const Str& Key; typedef Str Value;
YéTeeh: compte-tenu du namespace std, je ne pense pas que le problème vienne de là.
Je rajoute une question à la première. Si j'ai bien compris, "less" est un mot clé. Mais à quoi sert ce troisième type d'éléments du tableau?
Rajoute #include <map>.
less n'est pas un mot clef, c'est un foncteur qui pourrait être défini ainsi:
Tu n'est pas obiligé de mettre le 3eme argument de modèle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 template<class T>class less { bool operator() (T& a, T& b) { return a < b; } }
Le include y est déjà.
Avec un compilateur plus récent, voici ce que j'obtiens:
ISO C++ forbids declaration of `map' with no type
error: expected `;' before '<' token
pour la ligne commençant par: "typedef map...
cf plus haut, map fait partie du namespace std, tu dois donc l'indiquer :
en debut de fichier :
using namespace std; // std pour tout le monde ( open() reste accessible par ::open(), par exemple)
a chaque appel :
std::map ...
J'ai essayé mais çà change rien à la compilation...
essaye un map<int,int>
puis un map<string,string> (string def dans <string>, c'est quoi Str, un truc a toi ?)
puis un map< string , string , less<string> >
...
fais bien gaffe aux espaces autour de less<string> pour separer les >
EDIT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part map<a,b> est-i-il identique a map <a,b> ?
Je me demande si cela ne viens pas de mon compilateur.
C'est gcc version 2.7.2.3 ...
Ca a l'air assez vieux en effet. Pour s'en assurer il suffit de voir si ce code minimal compile ou non chez toi :Envoyé par C_R
Dans tous les cas, mettre à jour ton compilo ne serait pas une mauvaise idée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #include <map> int main() { std::map<int, int> m; return 0; }
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Effectivement, il commence à se faire vieux ...
Ca a pas l'air super simple de mettre à jour son compilo?
Pour le bout de code à tester en compilation,est-ce normal que ça marche avec une commande g++ et que çà me donne ce qui suit avec la commance gcc:
In file included from /usr/include/g++/stl_tree.h:56,
from /usr/include/g++/map:31,
from test.cpp:1:
/usr/include/g++/stl_algobase.h:52: new.h: No such file or directory
In file included from /usr/include/g++/stl_tree.h:58,
from /usr/include/g++/map:31,
from test.cpp:1:
/usr/include/g++/stl_construct.h:34: new.h: No such file or directory
Bien sûr, gcc sert à compiler du C et g++ du C++.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
OK
Mais j'imagine que gcc switche de lui-même à g++ quand il voit l'extension cpp? Non?
Non, justement.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
Pour ceux qui prennent le thread en route.
Voici mon code:
que je compile avec g++ 2.7.2.3. Ce qui me donne les messages suivants
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 #ifndef __CONFIG_H #define __CONFIG_H #include <stdio.h> #ifdef _WIN32 # ifdef _MSC_VER # pragma warning(disable:4786) # endif # include <map> using namespace std; #endif #ifdef _LINUX # include <map> #endif #include "str.h" using namespace std; class PropertyTbl { public: typedef map<Str, Str, less<Str> > Table; typedef Table::iterator Iter; typedef Table::const_iterator C_Iter;
Je voudrais surtout comprendre la première erreur.`less' was not declared in this scope
parse error before `>'
warning: ANSI C++ forbids typedef which does not specify a type
parse error before `::'
`int' is not an aggregate type
warning: ANSI C++ forbids typedef which does not specify a type
confused by earlier errors, bailing out
Inclus le header fuctional:
Et de toute façon,
Code : Sélectionner tout - Visualiser dans une fenêtre à part #include <functional>
est équivalent puisque le type pas défaut sera, dans ce cas, less<Str>
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef map<Str, Str> Table;
Voici le bout de code modifié:
et voici les messages du compilo:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include "str.h" using namespace std; #include <functional> class PropertyTbl { public: typedef std::map< Str, Str > Table; typedef Table::iterator Iter; typedef Table::const_iterator C_Iter; typedef const Str& Key; typedef Str Value;
Je comprend pas. Je ne vois pas ce qui foire. Arrêter moi si je me trompe :error: ISO C++ forbids declaration of `map' with no type
error: template-id `map<Str, Str>' used as a declarator
error: parse error before `;' token
error: ISO C++ forbids declaration of `Table' with no type
error: parse error before `::' token
error: `int' is not an aggregate type
error: ISO C++ forbids declaration of `const_iterator' with no
crée une spécialisation du template map. C'est donc sensé être un type et non un template-id.
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::map< Str, Str >
Merci de votre aide, d'avance.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager