std::map con Filename como clave y Filedescriptor como valor.
Estoy iterando a través de un vector, y cada entrada en el vector tiene que ser escrita en un archivo dependiendo de la entrada.
Digamos que Vector {Archivo A, Archivo B, Archivo C, Archivo A….}
Entonces, varios descriptores de archivo están abiertos y los estoy almacenando en un std::map:
Clave = Nombre de archivo y Valor = FileDescriptor. Vea el código a continuación.
Cuando un nombre de archivo no se encuentra en el mapa, inserto en el mapa un par de datos (nombredelarchivo, filedescriptor). El compilador está lanzando un error. Ver detalles del error a continuación después del código.
“`c++
std::map <std::string, std::ofstream=""> filemap; // mantiene el nombre de archivo para cada elemento en la lista.
std::vector <std::string> items;
for (i=0 ; i < items.size() ; i++) {
if (keyfilemap.find(items[i]) == keyfilemap.end()) {
std::ofstream ofs (items(i), std::ofstream::out);
ofs << key.first << "-" << key.second << std::endl;
// El compilador lanza un error aquí.
keyfilemap.insert(std::make_pair(filename, ofs));
}
else
keyfilemap[filename] << key.first << "-" << key.second << std::endl;
}
Error del compilador.
none
/usr/include/c++/7/bits/stlpair.h:529:14: error: no se encontró una función coincidente para 'std::pair<><char>, std::basicofstream<char> >::pair(std::cxx11::basicstring<char>&, std::basicofstream<char>&)'
return pairtype(std::forward<t1>(x), std::forward<t2>(__y));
“`</std::string,>
davy.ai
El error se debe al hecho de que
std::make_pair
espera dos argumentos del mismo tipo, pero estás pasando unstd::string
y unstd::ofstream
. Para solucionar esto, necesitas crear un objetostd::pair
con los dos argumentos.c++
</std::string,>std::pair<std::string, std::ofstream=""> p(filename, ofs);
keyfilemap.insert(p);