これが私のC++構文のエラーであるかどうか、またはこれがまったく達成できないものかどうかはわかりません。std :: mapをrvalueとして作成することはできますか?
std :: mapをコンストラクタ引数として取るクラスを定義します。次に、 "一時的な"(この "rvalue"と呼ぶのに適していますか?)std :: mapを渡して、そのクラスのインスタンスを作成します。私。私はlvalue std :: mapを作成し、それをコンストラクタに渡したくありません。
これを達成できますか?私はこれが私のコンパイラです(行が失敗した試行を示しコメント)
#include <map>
#include <string>
#include <iostream>
class Test
{
public:
Test(std::map<int,char>& rMap)
{
std::map<int,char>::iterator iter;
for (iter = rMap.begin(); iter != rMap.end(); ++iter)
{
mMap[iter->first] = mMap[iter->second];
}
}
virtual ~Test(){}
protected:
std::map<int, char> mMap;
};
int main()
{
std::cout << "Hello world!" << std::endl;
//Test test({1,'a'}); // Compile error.
//Test test(std::map<int,char>(1,'a')); // Also compile error.
//Test test(std::map<int,char>{1,'a'}); // Yet again compile error.
return 0;
}
を次のことを試してみました:
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
エラーは、要求に応じて投稿することができますが、彼らは有用であろう場合、私はわからないコンパイル私の問題が構文的であれば。
ありがとうございます。
'テストテスト(std :: map {{1、 'a'}});' 2つの中括弧を使用しましたか? –
@TimStraubinger - あなたの提案に基づいてこれを試しましたが、さらに別のコンパイルエラーが発生しました。 – StoneThrow
_「コンパイルエラー」ですか? –