그래서 enum을 std :: string에 연결하려고합니다. 이를 위해 다음 코드를 작성했습니다.C++ : enum을 std :: string에 연결하십시오.
typedef enum { NODATATYPE = -1,
DATATYPEINT,
DATATYPEVARCHAR
} DATATYPE;
inline std::string operator+(std::string str, const DATATYPE dt){
static std::map<DATATYPE, std::string> map;
if (map.size() == 0){
#define INSERT_ELEMENT(e) map[e] = #e
INSERT_ELEMENT(NODATATYPE);
INSERT_ELEMENT(DATATYPEINT);
INSERT_ELEMENT(DATATYPEVARCHAR);
#undef INSERT_ELEMENT
}
return str + map[dt];
}
및
DATATYPE dt1 = DATATYPEINT;
std::string msg = "illegal type for operation" + dt1;
는이 코드를 컴파일 다음과 같은 경고를 받고 있어요.
경고 : ISO C++에서는 첫 번째 코드에 대한 최악의 변환이 두 번째 코드의 최악의 변환보다 낫지 만 모호합니다. std :: string msg = "잘못된 연산 유형"+ dt1; absch.cpp : 642 : 55 : 참고 : 후보 1 : 연산자 + (const char *, long int) file.cpp에서 포함 된 파일 : 4 : 0 : file.h : 18 : 20 : 참고 : 후보 2 : std : : 문자열 연산자 + (std :: string, DATATYPE) 인라인 std :: string 연산자 + (std :: string str, const DATATYPE dt) {
이 경고는 무엇을 의미하며 어떻게 해결해야합니까?
DATATYPE에서
또는 더 좋은 호출되어야 하는지를 컴파일러는 구별 할 수없는,이 의미하는 int 타입이다. C++ 11에서 enum 클래스를 사용할 수 있습니다. – UldisK
오류가 발생하지 않습니다 http://ideone.com/Xsggwz – Ankur
맵을 사용하는 대신 여기에 설명 된대로 열거 형 및 'to_string'함수와 함께 사용하는 정적 보조 구조를 권장합니다. http://stackoverflow.com/ 질문/9150538/how-do-i-tostring-an-enum-in-c/9150607 # 9150607 – pmr