Ich bin mir nicht sicher, ob dies ein Fehler mit meiner C++ - Syntax ist, oder ob dies überhaupt nicht möglich ist.Möglich std :: map als rvalue zu erstellen?
Ich möchte eine Klasse definieren, die eine Std :: Map als Konstruktorargument verwendet. Ich möchte dann eine Instanz dieser Klasse erstellen, indem ich ein "temporäres" (passenderweise diesen "rvalue" nennen?) Std :: map übergeben. I.e. Ich möchte nicht einen lvalue std :: map erstellen und dann das an den Konstruktor übergeben.
Kann dies erreicht werden? Ich habe folgendes versucht (kommentierten Zeilen Versuch nicht nachgewiesen)
#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;
}
Das ist mein Compiler:
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Kompilieren Fehler auf Anfrage gebucht werden können, aber ich bin nicht sicher, ob sie nützlich wäre, wenn mein Problem syntaktisch ist.
Vielen Dank.
Haben Sie versucht Test test (std :: map {{1, 'a'}}); 'mit zwei Gruppen von geschweiften Klammern? –
@TimStraubinger - versuchte dies auf Ihren Vorschlag hin, führte aber zu einem weiteren Kompilierungsfehler. – StoneThrow
_What_ "Kompilierfehler"? –