我試圖做一個簡單的地圖來查找一些數據,但結果出來很奇怪:這是一個編譯器錯誤?難道我做錯了什麼?
#include "stdafx.h"
#include "atlstr.h"
#include <map>
enum InputTypes { Manual, Automatic, Assisted, Imported, Offline };
struct Params
{
int inputType;
const char* moduleName;
DWORD flag;
};
int _tmain()
{
std::map<CString, Params> options {
{ "Add", { Manual, "RecordLib", 0 } },
{ "Open", { Assisted, "ViewLib", 1 } },
{ "Close", { Imported, "EditLib", 2 } },
{ "Inventory", { Automatic, "ControlLib", 3 } },
{ "Report", { Offline, "ReportLib", 4 } }
};
for (std::map<CString, Params>::iterator iter = options.begin(); iter != options.end(); ++iter)
{
printf("Entry: %s ==> { %d, %s, %d }\n", (const char*)(iter->first),
iter->second.inputType, iter->second.moduleName, iter->second.flag);
}
return 0;
}
輸出:
Entry: îþîþîþîþîþîþîþîþîþîþîþîþ[â0; t ==> { 0, RecordLib, 0 }
Entry: Close ==> { 3, EditLib, 2 }
Entry: Inventory ==> { 1, ControlLib, 3 }
Entry: îþîþîþîþîþîþîþîþîþîþîþîþCâ0# t ==> { 2, ViewLib, 1 }
Entry: Report ==> { 4, ReportLib, 4 }
正如你所看到的,幾個CString值轉向垃圾。 但我看不出有什麼理由不能以這種方式創建地圖。
這是Microsoft Visual Studio 2013編譯器中的一個錯誤嗎?
我的代碼有什麼奇怪的東西,我錯過了?
############編輯##############
對於那些誰認爲這是一個問題CString
,與std::string
我重新寫的,並且變得更糟輸出:
#include "stdafx.h"
#include "atlstr.h"
#include <map>
enum InputTypes { Manual, Automatic, Assisted, Imported, Offline };
struct Params
{
int inputType;
std::string moduleName;
DWORD flag;
};
int _tmain(int argc, _TCHAR* argv[])
{
std::map<std::string, Params> options{
{ "Add", { Manual, "RecordLib", 0 } },
{ "Open", { Assisted, "ViewLib", 1 } },
{ "Close", { Imported, "EditLib", 2 } },
{ "Inventory", { Automatic, "ControlLib", 3 } },
{ "Report", { Offline, "ReportLib", 4 } }
};
for (std::map<std::string, Params>::iterator iter = options.begin(); iter != options.end(); ++iter)
{
printf("Entry: %s ==> { %d, %s, %d }\n", iter->first.c_str(),
iter->second.inputType, iter->second.moduleName.c_str(), iter->second.flag);
}
return 0;
}
輸出
Entry: ==> { 0, , 0 }
Entry: Report ==> { 4, , 4 }
請注意,這確實可行IDEOne
您必須將'CString'對象明確地轉換爲'LPCTSTR'。儘管如此,最好儘快離開'CString'。 – Chad
@Chad,連同上個世紀的所有省略號廢話:D – SergeyA
我已更新我的代碼以進行明確的演員表演。但是,同樣的問題依然存在。 – abelenky