2016-11-26 8 views
2

을 컴파일 <문자 [], []는 char>, 나는 CSS 코드에 말대꾸 코드를 변환 할. 나는 그 값에 사스의 변수에 맞게, 문자 배열의지도와 함께 일하고 싶어. 어떤 이유로지도에 값을 삽입 할 수 없습니다.지도에서 플렉스 C 나던 내가 리눅스에 vmPlayer에 플렉스 (.lex이다 파일) 작업입니다

%{ 
    #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 
%% 

가 컴파일하고 나에게 오류 제공하지 않습니다 일반적으로

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")); 

, 나는 C 라이브러리 내가 플렉스에 쉽게 사용하고 플렉스 사용하여 더 많은 비린내가있는 수 있는지 모르겠습니다. 구문에 문제가 있습니까? 고맙습니다!

+0

이 C++ 코드가 아닌 C 코드입니다. 그래서 당신은 일을했던 C++ –

답변

2

생성 된 C++ 코드의 문제점은 pair(const char [3], const char [5]) (상수 문자열의 크기 임)은 pair(const char [20], const char [20])과 아무 관련이 없습니다. 그냥 하지 같은 유형입니다.

3 솔루션 : char 배열 크기

  • 추가 템플릿 인수 : 대신 경우에만
  • 사용 char [] (EDIT는 여전히 모든 요소에 대해 동일한 크기 일 필요 때문에 작동하지 않습니다) 삽입 할 상수가 있습니다
  • 이상 & 모든 경우를 포함하여 &을 사용하십시오. std::string 유형을 사용하십시오. 생성자에서 문자 배열을 사용할 수 있습니다. 이 같은

:

%{ 
    #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

으로 귀하의 질문에 태그를해야하지만 문자 *를 기다리고 있기 때문에 지금은 그것을 인쇄하지 못할 -> fprintf와 (yyout는, "% s의"사전 [ "BB"]); 나에게 오류를 제공합니다 : ** ello.lex : 60 : 47 : 오류 : 표준 '유형에서 유효하지 않은 캐스트 :지도 <표준 : __ cxx11 :: 를 basic_string, 표준 : __ cxx11 :: basic_string > :: mapped_type {일명 표준 표준 : cout' 인쇄 할 수있는 ** – mooly

+0

시도'; :: __ cxx11 ::} 를 basic_string 숯불 * ' 는 fprintf (yyout는, "% s'에, (숯불 *) 사전 ["BB를 "]) '입력합니다' 'std :: string' 또는'dictionary [ "bb"] .c_str()'를 사용하여 char 내용을 얻으십시오. –

+1

mooly : 사용법 : 사전 [ "bb"]. c_str() –