搭售make_tuple編譯與Visual Studio 10下面的程序,我得到很多的編譯錯誤的:有問題的std :: C++ 0x中
#include "stdafx.h"
#include <tuple>
#include <string>
#include <map>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::tuple<std::string, std::string> key_t;
typedef std::map<key_t, std::string> map_t;
map_t the_map;
auto k = std::make_tuple("one", "two");
the_map[k] = "the value";
auto q = std::make_tuple("one", "two");
auto i = the_map.find(q);
std::cout << i->second << std::endl;
return 0;
}
錯誤1個錯誤C2664:「的std :: basic_string < _Elem,_Traits,_Ax> :: basic_string(const std :: basic_string < _Elem,_Traits,_Ax> &)':無法將參數1從'const key_t'轉換爲'const std :: basic_string < _Elem,_Traits,_Ax > &'c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ tuple 127 1元組
從線出發:
std::cout << i->second << std::endl;
奇怪的是,從我的角度來看至少,如果我改變這些行:
auto k = std::make_tuple("one", "two");
the_map[k] = "the value";
到
the_map[std::make_tuple("one", "two")] = "p";
的程序編譯。所以我的問題當然是爲什麼?我猜它是與make_tuple和移動語義 - 但我不明白..
感謝 - 它的工作原理和我的原始代碼將與您的修復程序看起來沒問題。 – baardk 2010-08-02 12:41:00
請注意,您也可以編寫'the_map [std :: move(k)] =「value」,但這會「銷燬」您的''k'變量(查看一些關於移動語義的文章,如果您沒有看到什麼我的意思是摧毀)。 – Tomaka17 2010-08-02 12:46:36
不錯。我在一些MS連接網站上發佈了這個問題,所以他們可以檢查它是一個錯誤還是什麼。 – baardk 2010-08-02 12:53:41