Ho un std::map
Sto provando a inizializzare con un elenco di inizializzazione. Lo faccio in due posti, in due modi diversi. Il primo funziona, mentre l'altro causa l'errore menzionato nel titolo."C2593: operator = is ambiguous" quando popolano std :: map
Ecco quello che funziona:
void foo() {
static std::map<std::string, std::string> fooMap =
{
{ "First", "ABC" },
{ "Second", "DEF" }
};
}
Anche se questo non lo fa:
class Bar {
public:
Bar();
private:
std::map<std::string, std::string> barMap;
};
Bar::Bar() {
barMap = { // <-- this is the error line
{ "First", "ABC" },
{ "Second", "DEF" }
};
}
Perché ottengo l'errore quando si cerca di inizializzare il membro della classe, mentre la cartina opere statiche? Al momento, posso compilare il membro creando innanzitutto una variabile locale e quindi scambiandolo con l'elemento simili:
Bar::Bar() {
std::map<std::string, std::string> tmpMap = {
{ "First", "ABC" },
{ "Second", "DEF" }
};
barMap.swap(tmpMap);
}
Tuttavia, questo si sente piuttosto intuitivo rispetto ad appena popolamento direttamente l'organo.
EDIT: Here's the compiler output.
Questo compila su ideone: http://ideone.com/OkXujD – TNA
@manabreak Sembra che sia un bug del compilatore. Si prega di mostrare il messaggio di errore completo. –
Funziona su GCC 4.7.2. Che compilatore stai usando? –