Je ne suis pas sûr si c'est une erreur avec ma syntaxe C++, ou si c'est quelque chose qui ne peut pas être accompli du tout.Possibilité de créer std :: map comme valeur?
Je veux définir une classe qui prend un std :: map comme argument constructeur. Je veux ensuite créer une instance de cette classe en passant un "temporaire" (approprié d'appeler cette "rvalue"?) Std :: map. C'est à dire. Je ne veux pas créer une lvalue std :: map et ensuite passer cela au constructeur.
Est-ce que cela peut être accompli? J'ai essayé les éléments suivants (lignes commentées montrent tentatives échouées)
#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;
}
Ceci est mon compilateur:
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
des erreurs de compilation peuvent être affichées sur demande, mais je ne sais pas si elles seraient utiles si mon problème est syntaxique.
Merci.
Avez-vous essayé 'Test test (std :: map {{1, 'a'}})' avec deux jeux de parenthèses? –
@TimStraubinger - essayé ceci sur votre suggestion, mais a abouti à une autre erreur de compilation. – StoneThrow
_What_ "erreur de compilation"? –