2016-11-26 5 views
2

Ich arbeite an Flex (.lex-Datei) in VmPlayer auf Linux, und ich möchte Sass-Code in Css-Code konvertieren. Ich möchte mit einer Karte von Char-Arrays arbeiten, um Variablen in Sass mit ihren Werten zu vergleichen. Aus irgendeinem Grund kann ich keine Werte in meine Map einfügen.map <char [], char []> in Flex c kompiliert nicht

%{ 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string> 
    #include <map> 
    #include<iostream> 
    std::map<char[20], char[20]> dictionary; //MY DICTIONARY,GOOD 
%} 
%% 
s  dictionary.insert(std::pair<char[20], char[20]>("bb", "TTTT")); //PROBLEM 
%% 

es nicht kompilieren lässt und gibt mir Fehler:

hello.lex:30:84: error: no matching function for call to ‘std::pair<char  
[20], char [20]>::pair(const char [3], const char [5])’ 
ine(toReturn); dictionary.insert(std::pair<char[20], char[20]>("bb", 
"TTTT")); 

Im Allgemeinen bin ich nicht sicher, was C-Bibliotheken ich leicht auf flex nutzen können und die mehr fischig mit flex. Gibt es ein Syntaxproblem? DANKE!

+0

Dies ist C++ Code, C-Code nicht. Also sollten Sie Ihre Frage als C++ –

Antwort

2

Das Problem im generierten C++ - Code ist, dass pair(const char [3], const char [5]) (das ist die Größe Ihrer konstanten Zeichenfolgen) hat nichts mit pair(const char [20], const char [20]) zu tun. Es ist nur nicht der gleiche Typ.

3 Lösungen:

  • add template Argumente für char-Array Größen (EDIT: funktioniert nicht, weil es immer noch die gleichen Größen für alle Elemente sein müsste)
  • Verwendung char [] statt, wenn Sie haben Konstanten zum Einfügen
  • oder besser & einfacher & deckt alle Fälle: Verwenden Sie std::string Typ, der Char-Arrays in seinem Konstruktor akzeptiert.

wie folgt aus:

%{ 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string> 
    #include <map> 
    #include<iostream> 
    std::map<std::string, std::string> dictionary; //MY DICTIONARY,GOOD 
%} 
%% 
s  dictionary.insert(std::pair<std::string, std::string>("bb", "TTTT")); 
%% 
+0

haben es funktioniert, aber jetzt kann ich es nicht drucken, weil es auf Char wartet * -> fprintf (yyout, "% s", Wörterbuch ["bb"]); gibt mir Fehler: ** ello.lex: 60: 47: Fehler: ungültige Umwandlung vom Typ 'std :: map , Std :: __ cxx11 :: basic_string > :: mapped_type {aka std :: __ cxx11 :: basic_string } 'um' char * 'zu schreiben fprintf (yyout, "% s", (char *) Wörterbuch ["bb"]); ** – mooly

+0

versuchen Sie 'std :: cout', die drucken können 'std :: string' oder benutze' wörterbuch ["bb"]. c_str() ', um char-Inhalte zu erhalten. –

+1

mooly: verwenden: Wörterbuch ["bb"]. C_str() –

Verwandte Themen