es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error se debe al hecho de que std::make_pair espera dos argumentos del mismo tipo, pero estás pasando un std::string y un std::ofstream. Para solucionar esto, necesitas crear un objeto std::pair con los dos argumentos.

    c++
    std::pair<std::string, std::ofstream=""> p(filename, ofs);
    keyfilemap.insert(p);
    </std::string,>

Comments are closed.